CRC 计算忽略文件名 (Python 3.5)

CRC Calculation Ignoring Filename (Python 3.5)

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

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

我考虑过一种解决方法,即在检查 CRC 之前将文件名更改为标准名称,但我想知道是否有更简单、更快的方法来执行此操作。

我不会为您编写代码。 不过,您可以做什么:

  1. 创建一个字典 key=filename, value=MD5/SHA1 随便说 dict1
  2. 创建一个字典 key=MD5/SHA1, value=filename, say 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 但结果可能因行终止、空行数而异...

我建议您自己尝试一下,然后 rename/copy 将 python 文件复制到另一个文件以证明它不会改变。然后在它会改变的地方添加评论...祝你的项目好运。

编辑 2:事后思考:您可以阅读 Git 配置系统。它使用 CRC/MD5 系统来检查文件是否更改。我对此了解不多,但它可能会在您不编写任何代码的情况下满足您的目的。