几个数字即使在使用拆分函数之后也不会被拆分。
707 K -7 -7 -6 -8 -2 -5 -8 -8 2 -5 -4 -7 -6 6 -8 -6 -7 -4 8 -6
708 L 0 0 -2 -3 -3 1 3 -3 0 -1 -3 4 -2 -5 -2 0 0 -3 -2 0
709 V -7-10 -9-10 12 -9-10 -9 -9 -8 -8 -9 -8 -9 -9 -5 -7 -9 -4 -7
710 P -1 -2 2 1 -2 1 2 -1 1 -4 -4 2 -3 -4 3 1 0 -1 -3 -4
711 E -3 -3 -3 1 -6 1 5 -3 2 0 -1 -1 -1 -1 -5 -2 -1 -4 0 0
712 C -7-10 -9-10 12 -9-10 -9 -9 -8 -8 -9 -8 -9 -9 -4 -7 -9 -9 -7
713 S -4 -4 1 1 -5 -2 -1 6 -1 -8 -7 -3 -7 -4 -2 -1 -3 -4 -4 -7
此矩阵来自文本文件,非常大(文件中的行数以及此类文件的数量)。
我成功地阅读了python中的行,并将它们拆分为
m = fp.readline(); [fp is the file pointer and reading is done in loop]
m = m.split() ; [splitting by elements ]
m = map(int,m[2:22]); [ mapping to make strings as integers from index 2 to 22 ]
但这给第709和712行带来了一个错误(见矩阵的左端)。
Traceback (most recent call last):
File "<pyshell#150>", line 1, in <module>
map(int,m[2:22].split())
ValueError: invalid literal for int() with base 10: '-7-10'
这是因为'-7-10‘没有像预期的那样分裂'-7’'-10‘,因为文件中的格式错误。
因此,问题是如何处理这个格式错误,以便像矩阵中的其他行一样拆分和处理整数?请记住,对于非常大的行和文件,必须这样做,因此手动编辑格式错误是不可行的,尽管单个文件中的这种错误在100以内。请帮帮我..。谢谢
发布于 2013-10-10 12:17:29
您可以对所有负面符号执行replace
,以确保它们之前至少有一个空格:
m = "-7-10 -9-10 12 -9-10 -9 -9 -8 -8 -9 -8 -9 -9 -5 -7 -9 -4 -7"
print m.replace("-", " -").split()
结果:
['-7', '-10', '-9', '-10', '12', '-9', '-10', '-9', '-9', '-8', '-8', '-9', '-8', '-9', '-9', '-5', '-7', '-9', '-4', '-7']
当然,只有当一个负数与它的邻居发生碰撞时,这才有帮助。如果您有冲突的值,如:
707 K -1 -2 -3
707 K -4123 -6
那么你就不能轻易地把-4和123分开.
发布于 2013-10-10 12:22:34
您可以(正如Simeon在注释中指出的那样)按固定位置解析数字;这种理解是通过循环从7到67,步进3,只将子字符串转换为整数;(示例中的字段似乎从位置7开始,每个字段都有3个字符长)。
>>> m
'709 V -7-10 -9-10 12 -9-10 -9 -9 -8 -8 -9 -8 -9 -9 -5 -7 -9 -4 -7\n'
>>> a = [int(m[pos:pos+3]) for pos in range(7,67,3)]
>>> a
[-7, -10, -9, -10, 12, -9, -10, -9, -9, -8, -8, -9, -8, -9, -9, -5, -7, -9, -4, -7]
发布于 2013-10-10 12:20:16
可以使用re
模块查找与特定regex模式匹配的所有子字符串:
>>> x = "-7-10 -9-10 12 -9-10 -9 -9 -8 -8 -9 -8 -9 -9 -4 -7 -9 -9 -7"
>>> import re
>>> re.findall( r"-?[0-9]+", x )
['-7', '-10', '-9', '-10', '12', '-9', '-10', '-9', '-9', '-8', '-8', '-9', '-8', '-9', '-9', '-4', '-7', '-9', '-9', '-7']
当然,如果您可能将7, 123
格式化为7123
,那么唯一的选择是按索引而不是内容模式拆分字符串。
https://stackoverflow.com/questions/19295445
复制相似问题