我有一个按预期工作的程序:
import os
import hashlib
from pprint import pprint
def md5(fname):
hash_md5 = hashlib.md5()
with open(fname, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
lst = []
for dirpath, dirnames, filenames in os.walk('d:\\python\\exercism.io'):
d = {dirpath: filenames}
for filename in filenames:
d[filename] = [os.stat(dirpath).st_mtime, md5(dirpath + '\\' + filename)]
# d[filename] = [os.stat(dirpath).st_mtime]
# d[filename] = [md5(dirpath + '\\' + filename)]
lst.append(d)
pprint(lst)
我的问题是:
如果我摆脱这条线:
d[filename] = [os.stat(dirpath).st_mtime, md5(dirpath + '\\' + filename)]
并尝试使用两个注释掉的行(带有修改 - 见下文),它失败了。
1)要么自己注释掉线条。我得到一个键:值对,其中值是一个列表。
然后我想将第二个注释掉的行的值添加到列表中。
我正在尝试这个:
d[filename][1] = md5(dirpath + '\\' + filename)
但是我的索引超出了范围错误。列表的第一个元素 应该是项目[0],第二个应该是[1]。
部分输出:
[{'ceasar_cipher.py': [1512494094.5630972, '844e069c90ebdb3e1e5f5dd56da2ac2e'],
'd:\\python\\exercism.io': ['ceasar_cipher.py',
'difference_of_squares.py',
'gigasecond.py',
'grains_in_python.py',
'hamming-compare.py',
'isogram.py',
'leap_year.py',
'rna_transcription.py',
'run_length_encoding.py'],
注意关键:' ceasar_cipher.py'有一个两元素列表的值。
我想用两个注释掉的行构造完全相同的输出 与我现在使用的单行相比(只是我可以,而不是我应该)。我担心的只是我做错了什么。
答案 0 :(得分:0)
您需要附加到列表中:
d[filename] = [os.stat(dirpath).st_mtime]
d[filename].append(md5(dirpath + '\\' + filename))
获得相同的效果。索引1还没有项目。您需要创建它,例如使用append()
。