我目前正在尝试将.txt文件导入某些专有软件,但似乎不断收到错误。 .txt文件大小近2GB,大约有5600万行。
在与制造商交谈后,他们表示其中一条线路可能存在错误。每行应包含一个MD5哈希值(32个字符),因此,使用Python v2.7,我希望扫描处理.txt文件以检查每行的长度并打印'违规'行的值
这是我尝试过的: -
f = open("x.txt")
contents = f.readlines()
f.close()
for line in contents:
if line(len) == 32:
continue
else:
print line
不幸的是,当我尝试使用此代码时收到错误: -
File "<pyshell#30>", line 2, in <module>
if line(len) == 32:
TypeError: 'str' object is not callable
所以我尝试了以下相信我必须将'line'转换为整数: -
for line in contents:
if int(line)(len) == 32:
continue
else:
print line
但这只是带来了错误: -
ValueError: invalid literal for int() with base 10: '000000000000000012452154365298BD"
如上所述,我要做的是读取.txt文件的每一行,如果它不是有效的MD5哈希值,则将值打印到屏幕甚至删除该值。
非常感谢
[edit] 原来这是一个小学生的错误。谢谢大家
答案 0 :(得分:8)
由于您的文件大小为2 GB,因此即使您将line(len)
更正为len(line)
,我也不建议按照您的方式执行此操作。您正在将整个文件读入内存,这是不必要的,如果您没有足够的RAM,可能会导致内存不足错误。我就是这样做的:
with open("x.txt") as f:
for line_no, line in enumerate(f):
# Remember not to count the newline character
if len(line.strip()) != 32:
print line_no, line
如果要删除所有字符数错误的行,最简单的方法是编写一个新的正确文件:
with open("outfile.txt", "w") as out:
with open("x.txt") as f:
for line_no, line in enumerate(f):
if len(line.strip()) == 32:
out.write(line)
else:
print "Removing line {0}".format(line_no)
脚本运行后,检查新文件是否正常,然后将旧文件移动到备份目录并重命名新文件x.txt
。
答案 1 :(得分:7)
line(len)
错误,请改用len(line)
答案 2 :(得分:0)
我担心你会倒退:使用len(line)
代替line(len)
。