2016-08-21 59 views
0

我希望能够计算文件的CRC,以便能够检查文件在将来的任何时候是否发生了变化(例如,第1天:filename.txt = A,第2天filename.txt = B - >文件已更改)。CRC计算忽略文件名(Python 3.5)

如果可能(并且这是我卡住的地方),我希望能够计算文件的CRC而不考虑文件名,以便能够识别文件名更改(例如第1天: filename.txt具有CRC值X,第2天:newFileName.txt具有CRC值X - >相同文件,新文件名)。

我认为一个解决方法是在检查CRC之前将文件名更改为某种标准,但我想知道是否有更简单快捷的方法来完成此操作。

+0

为什么不使用sha1或md5哈希 – peter

+1

文件的CRC通常不包含文件名。您需要特别努力将文件名包含在CRC计算的数据中。 –

+0

我认为文件名会影响算法的输出(crc/sha1/md5等)。如果只有文件的内容被算法使用,那么具有不同文件名但是像内容的两个文件将产生相同的输出。这种见解很好地解决了我的问题 - 谢谢! – user3535074

回答

1

我不打算为你写代码。 不过,你可以做什么:

  1. 创建辞典键=文件名,值= MD5/SHA1什么的,说dict1
  2. 创建辞典键= MD5/SHA1,值=文件名,说dict2

pickle他们,然后下一步检查比较键和dict1两个版本的值:如果差异的值,文件内容已经改变 dict2的相同之处:如果差异的值,文件名已更改,相同的内容。

你不能追查什么,但是文件名+文件内容改变。您将无法查看它是否是删除+新文件或重命名+更改内容。这是限制。

编辑:我在说谎,不写代码。我已经编写了一些示例代码来计算当前模块上的MD5校验和(仅用于演示目的)。

import hashlib 

with open(__file__,"rb") as f: # __file__ is full path to current .py file 
    contents=f.read() 

m = hashlib.md5(contents) 
print(m.hexdigest()) 

我得到ebb6e4753cfd7e23dae884a784bc1587,但结果可能因线路终端的空白行数量变化......

我建议你尝试一下自己,然后重命名/ Python的文件复制到另外一个证明你自己,它不会改变。然后添加评论某处它将改变...祝你好运与你的项目。

编辑2:事后编辑:您可以阅读有关Git配置系统。它使用CRC/MD5系统来检查文件是否更改。我对此不甚了解,但它可能会在您编写任何代码时服务于您的目的。

+0

这是个好主意,谢谢! – user3535074

+0

你能证实Mark Adler评论过吗?如果是,我可以接受答案(你的想法很好,但没有解决我对如何从crc algorythm中删除文件名的疑问)。编辑后的 – user3535074

+0

,你现在可以自由试验了。 –