-1

我目前正在尝试将 .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

所以我尝试了以下方法,相信我必须将“行”转换为整数:-

for line in contents:
    if int(line)(len) == 32:
        continue
    else:
        print line

但这只是带回了一个错误:-

ValueError: invalid literal for int() with base 10: '000000000000000012452154365298BD"

如前所述,我要做的是读取 .txt 文件的每一行,如果它不是有效的 MD5 哈希值,则将该值打印到屏幕上,甚至删除该值。

非常感谢

[编辑]原来这是一个小学生的错误。谢谢大家

4

3 回答 3

9

由于您的文件大小为 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

于 2012-10-23T09:29:33.223 回答
7

line(len)错了,len(line)改用

于 2012-10-23T09:27:17.063 回答
0

恐怕你在倒退:使用len(line)而不是line(len).

于 2012-10-23T09:29:53.763 回答