2016-08-21 56 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

,你現在可以自由試驗了。 –