2011-02-02 4 views
0

나는 파일을 비교하고 파이썬에서 중복을 보여주는 프로그램을 작성하려고한다. 누구든지 이것과 관련된 좋은 기능이나 방법을 알고 있습니까? 나는 잃어버린 분다. ...파이썬 메소드 또는 두 개의 비디오 파일을 비교하는 클래스?

+2

이미지 또는 원시 바이트를 비교하려고하십니까? (즉, 본질적으로 동일한 비디오이지만 해상도/화질/기타가 다른 두 개의 비디오 파일이 일치해야합니까?) –

+0

무엇을 구현하기가 더 쉽습니다. – DCIndieDev

답변

0

나는 파일 이름과 파일 크기를 비교하기 시작한다. 일치하는 항목을 찾으면 파일의 바이트를 반복하여 비교할 수 있습니다.

파이썬에서이 작업을 수행 할 수있는 라이브러리에 대해 잘 모릅니다.

2

그냥 정확한 중복을 찾고 있다면, 모두에 MD5 hash을하고이 일치하는지 확인 :

import hashlib 

file1 = open('file1.avi', 'r').read() 
file2 = open('file2.avi', 'r').read() 

if hashlib.sha512(file1).hexdigest() == hashlib.sha512(file2).hexdigest(): 
    print 'They are the same' 
else: 
    print 'They are different' 

하지 않으면, 나는 OpenCV's Python Bindings을 시도 할 것 그들이 프레임 단위로 일치하는지 확인.

+0

MD5가 손상되었음을 유의하십시오. 일반적인 파일의 고유성을 비교하는 것만으로도 충분하지만 공격자가 '가짜 일치'를 만들 수 있습니다. –

+0

비디오 파일을 비교하여 충돌을 일으킬 지 의심 스럽습니다. 하지만 당신이 주장한다면, 나는 조금 더 나은 것을 사용할 것입니다;) – Blender

0

os.walk를 사용하여 파일 트리를 탐색합니다.

각 파일에 대해 파일 크기 및 서명 (처음 16 바이트? 처음 512 바이트의 해시? 전체 파일의 해시?)으로 인덱싱 된 절대 경로 + 파일 이름을 저장합니다.

완료되면 파일 크기가 달라집니다. 각각의 크기에 대해, 파일 서명의 사전; 각 서명에 대해 해당 서명을 공유하는 모든 파일의 목록 파일 서명이 전체 파일을 기반으로하지 않거나 충돌 가능성이 큰 경우 충돌하는 파일 만 심층적으로 비교할 수 있습니다.

관련 문제