如何读取大型文件字典并获取每个条目的哈希值?蟒蛇

时间:2015-12-04 09:28:55

标签: python dictionary hash

我有一个大文件,每行一个字符串。我想读取此文件,获取SHA1哈希值并将字符串及其哈希保存到文件中...

到目前为止我只是想读大字典文件......

DictionaryV = []
with open('Dictionary.txt','r') as inf:
    for line in inf:
        DictionaryV.append(eval(line))

print DicionaryV[0]

我想要打印以查看是否有任何加载。我一直收到以下错误

Traceback (most recent call last):
  File "./script", line 7, in <module>
    DictionaryV.append(eval(line))
 File "<string>", line 1
   !
   ^
SyntaxError: invalid syntax

这是我试图阅读的文件的前几行:

! 
!elephant!
!!!
!!!!!
!!!!!!
!!!!!!!
!!!!!!!!
!!!!!!!!!!
!!!!!!1
!!!!!!888888

3 个答案:

答案 0 :(得分:0)

在附加到dict时不要致电eval()eval只会尝试将字符串!计算为python表达式,而这不是您想要的。

DictionaryV.append(line)

您还可以使用DictionaryV = inf.readlines()DictionaryV = list(f)获取所有行。

此外,如果您尝试为每个字符串获取SHA1哈希值,则不需要字典,您可以使用hashlib中的函数计算SHA1:

答案 1 :(得分:0)

将字符串附加到字典时无需评估字符串:

DictionaryV = []
with open('Dictionary.txt','r') as inf:
    for line in inf:
        DictionaryV.append(line)

print DicionaryV

请注意DictionaryV是一个列表,而不是字典。

答案 2 :(得分:0)

此代码逐行读取文本文件,从行末尾删除任何尾随空格,计算该行的SHA1哈希值,然后使用SHA1哈希的十六进制格式将该行写入输出文件附加,使用单个空格分隔剥离的行内容及其散列,以及散列后的换行符。

在Python 2.6.6上测试过,但它也应该在任何更高版本的Python上正确运行。

from hashlib import sha1

iname = 'qdata'
oname = 'qdata_sha1'

with open(iname, 'r') as ifile:
    with open(oname, 'w') as ofile:
        for line in ifile:
            line = line.rstrip()
            digest = sha1(line).hexdigest()
            ofile.write('{0} {1}\n'.format(line, digest))

使用问题中提供的数据作为“qdata”的内容,这里是“qdata_sha1&#39;”的内容:

! 0ab8318acaf6e678dd02e2b5c343ed41111b393d
!elephant! 750b8da9d4b0a1d2d472afdbec88d74d0d9c3736
!!! 9a7b006d203b362c8cef6da001685678fc1d463a
!!!!! 1227cb28ec9e51942b7dacc0d5453e10d975612f
!!!!!! bae598184569d68359358ff314765c82166f9dfd
!!!!!!! 9b8a410b57694951c5ca9405c741fcc7578af9b1
!!!!!!!! 4cca2690b6ba377b0ed0aae5c6bd746583f34cd6
!!!!!!!!!! f2f7e9980103b41cefff52cb41df97a157de8b40
!!!!!!1 a807638c63c996475e0d1c9bdd84deef9504f7ef
!!!!!!888888 ecd90d1f8bd89fab7001f21a15375f90cfc259c9