我有一个大文件,每行一个字符串。我想读取此文件,获取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
答案 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