行中的字符串长度(Python)

时间:2012-10-23 09:26:11

标签: python md5

我目前正在尝试将.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] 原来这是一个小学生的错误。谢谢大家

3 个答案:

答案 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)