【发布时间】:2018-08-05 19:35:30
【问题描述】:
我看到一些帖子在目录中查找重复项并进行压缩:here、here 和 here,但这些帖子都没有解释如何反转该过程。
因此,在此过程之后,您最终会得到文件哈希、文件本身以及它们出现的位置。就我而言,我正在使用该算法在文件中查找重复项。从一个 6 kB 的文件,我减少到 2 kB。当我尝试重建文件时,内容相同,但文件大小和比较失败。
这是我的代码,用于重建我从以前的 post 修改的文件:
import pickle
import hashlib
with open(compressed, 'rb') as f, open(recovered, "wb") as fname:
a_dict = pickle.load(f) # loads the compressed file
a_list = []
for values_list in a_dict.values():
file_bytes = values_list.pop(0)
for val in values_list:
a_list .insert(val, file_bytes)
result = tuple(a_list)
pickle.dump(result, fname, protocol=pickle.HIGHEST_PROTOCOL)
a_dict 在哪里
a_dict =
{'8a50b9f75b57104d89b58305d96045df':[b'\x94*\x08\x9d\xd8', 0, 1, 4, 6, 7],
'bff92f621cc65e2103305343a943c9a8':[b'\x85*\xe4\xf0\xd7', 2, 3, 5, 8, 9]}
同样,原始文件的内容与result 相同。但是当我与 Unix cmp file1 file2 比较时,甚至当我再次对文件进行哈希处理时,字节都不相同。
【问题讨论】:
-
你可以尝试腌制加载这两个文件并进行比较吗?那会更清楚。或者使用
json转储您的数据,而不是pickle,这样您就可以看到为什么它们不同。 -
要调试它,创建一个文件'aba.txt',其中每行是1023个'a'(或'b')字符,后跟换行符。然后使用
diff -u aba.txt reconstructed.txt了解南下的情况。另外,您提到尺寸不同。多少?是否可能存在一些 LF 与 CRLF 问题,或者一个文件是否以 unicode BOM 字节顺序标记开头?使用hexdump -C验证详细信息。
标签: python arrays python-3.x