【发布时间】:2018-10-24 06:47:32
【问题描述】:
假设您有一个包含数百或数千个 .csv 或 .txt 文件的文件夹,这些文件可能包含不同的信息,但您想确保 joe041.txt 实际上不包含与 joe526.txt 相同的数据事故。
我没有将所有内容加载到一个文件中(如果每个文件都有数千行,这可能会很麻烦),而是使用 Python 脚本来读取目录中的每个文件并计算校验和,然后您可以进行比较在您的数千个文件之间。
有没有更有效的方法来做到这一点?
即使使用filecmp 似乎效率较低,因为该模块只有 file vs file 和 dir vs dir 比较,但没有 file vs dir 命令——这意味着要使用它,您必须遍历 x² 次(dir 中的所有文件与dir 中的所有其他文件对比)。
import os
import hashlib
outputfile = []
for x in(os.listdir("D:/Testing/New folder")):
with open("D:/Testing/New folder/%s" % x, "rb") as openfile:
text=openfile.read()
outputfile.append(x)
outputfile.append(",")
outputfile.append(hashlib.md5(text).hexdigest())
outputfile.append("\n")
print(outputfile)
with open("D:/Testing/New folder/output.csv","w") as openfile:
for x in outputfile:
openfile.write(x)
【问题讨论】:
-
也许可以通过在第一遍比较文件大小,然后在第二遍中仅读取前两三行,最后继续整个文件内容以消除所有误报来优化它第三遍。
-
使用
filecmp将不起作用,因为它仅比较date和size。不要使用list来保存校验和,而是使用dict和condition if md5 in dict。