Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
行中字符串的长度(Python)_Python_Md5 - Fatal编程技术网

行中字符串的长度(Python)

行中字符串的长度(Python),python,md5,Python,Md5,我目前正试图将一个.txt文件导入一些专有软件,但似乎不断收到一个错误。txt文件的大小几乎为2GB,大约有5600万行 与制造商交谈后,他们表示其中一条线路可能存在错误。每一行应该包含一个MD5哈希值(32个字符),因此,使用PythonV2.7,我希望扫描处理.txt文件以检查每一行的长度,并打印“违规”行的值 以下是我尝试过的:- f = open("x.txt") contents = f.readlines() f.close() for line in contents: i

我目前正试图将一个.txt文件导入一些专有软件,但似乎不断收到一个错误。txt文件的大小几乎为2GB,大约有5600万行

与制造商交谈后,他们表示其中一条线路可能存在错误。每一行应该包含一个MD5哈希值(32个字符),因此,使用PythonV2.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
但这带来了一个错误:-

ValueError: invalid literal for int() with base 10: '000000000000000012452154365298BD"
如前所述,我要做的是读取.txt文件的每一行,如果它不是有效的MD5哈希值,则将该值打印到屏幕上,甚至删除该值

非常感谢


[编辑]结果表明这是一个小学生的错误。谢谢大家

line(len)
是错误的,请使用
len(line)
代替

因为您的文件大小为2GB,所以我不建议您按照现在的方式来做,即使您将
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

恐怕您是在反向操作:使用
len(line)
而不是
line(len)
。。。不幸的是,我不是很精通python,但我正在学习:)谢谢。谢谢。如何更改此选项以删除该行,而不是“打印行\否”?谢谢
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)