2016-08-21 7 views
0

파일의 CRC를 계산하여 미래의 어떤 시점에서 파일이 변경되었는지 확인할 수 있기를 원합니다 (예 : 1 일 : filename.txt = A, 하루 2 filename.txt = B -> 파일이 변경되었습니다.)CRC 계산 파일 이름 무시하기 (파이썬 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 등)의 출력에 영향을 미친다 고 가정했습니다. 파일의 내용 만이 알고리즘에 의해 사용된다면 다른 파일 이름을 가진 2 개의 파일이지만 내용과 같은 출력은 동일한 출력을 생성합니다. 그 통찰력은 나의 문제를 멋지게 해결한다 - 고마워! – user3535074

답변

1

코드를 작성하지 않겠습니다. 그래도, 당신이 할 수있는 일 :

  1. 은 사전 키 = 파일 이름, 가치를 창출 = MD5/SHA1 무엇이든, dict1
  2. 은 사전 키를 생성 말할 = MD5/SHA1은, 값은 = 파일 이름, dict2

피클을 누른 다음 키와 두 버전의 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 얻을 수 있지만, 결과는 라인 종단, 빈 줄의 수에 따라 달라질 수 있습니다 너 자신은 변화하지 않는다. 그런 다음 변경 될 어딘가에 코멘트를 추가하십시오 ... 프로젝트에 행운을 비네.

편집 2 : 나중에 생각하면 : 당신은 힘내 구성 시스템에 대해 읽을 수 있습니다. 파일이 변경되었는지 확인하기 위해 CRC/MD5 시스템을 사용합니다. 나는 그것에 대해 많이 알지 못하지만, 당신이 코딩하지 않고서는 당신의 목적을 처리 할 수 ​​있습니다.

+0

이것은 훌륭한 아이디어입니다! – user3535074

+0

Mark Adler가 위에 논평 한 것을 확인할 수 있습니까? 그렇다면 대답을 받아 들일 수 있습니다 (귀하의 아이디어는 훌륭하지만 crc algorythm에서 파일 이름을 제거하는 방법에 대한 나의 의구심을 해결하지 못했습니다). – user3535074

+0

포스트를 수정하면 지금 자유롭게 실험 할 수 있습니다. –