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 之前将文件名更改为标准名称,但我想知道是否有更简单、更快的方法来执行此操作。
我不会为您编写代码。
不过,您可以做什么:
- 创建一个字典 key=filename, value=MD5/SHA1 随便说
dict1
- 创建一个字典 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 系统来检查文件是否更改。我对此了解不多,但它可能会在您不编写任何代码的情况下满足您的目的。
我希望能够计算文件的 CRC,以便能够检查文件是否在未来的任何时候发生了变化(例如第 1 天:filename.txt = A,第 2 天 filename.txt = B -> 文件已更改)。
如果可能(这就是我卡住的地方),我希望能够在不考虑文件名的情况下计算文件的 CRC,以便能够识别文件名更改(例如天 1:filename.txt 具有 CRC 值 X,第 2 天:newFileName.txt 具有 CRC 值 X -> 同一文件,新文件名)。
我考虑过一种解决方法,即在检查 CRC 之前将文件名更改为标准名称,但我想知道是否有更简单、更快的方法来执行此操作。
我不会为您编写代码。 不过,您可以做什么:
- 创建一个字典 key=filename, value=MD5/SHA1 随便说
dict1
- 创建一个字典 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 系统来检查文件是否更改。我对此了解不多,但它可能会在您不编写任何代码的情况下满足您的目的。