2014-02-20 3 views
1

파이썬으로 파일을 생성하는 스크립트가 있는데, 경우에 따라 스크립트가 윈도우에있는 파이썬과 함께 실행되고 다른 경우에는 cygwin의 파이썬으로 실행됩니다.Windows의 파이썬과 Cygwin의 파이썬으로 생성 된 파일의 차이점

파일의

텍스트는 동일하지만 difflib를 사용하는 경우,

gen_file_data = open(gen_file) 
base_file_data = open(base_file) 
gen_file_content = gen_file_data.read().splitlines(True) 
base_file_content = base_file_data.read().splitlines(True) 
gen_file_data.close() 
base_file_data.close() 
diff = difflib.unified_diff(gen_file_content, base_file_content, n=0) 
diff = ''.join(diff) 

파일이 다릅니다.

그리고 md5를 사용하면 다른 해시를 얻습니다. 내가 kdiff3와 파일을 비교하면 나는 두 파일 사이의 텍스트 diferences를 comparate 수있는 방법을

import hashlib 
base_md5 = hashlib.md5(base_file_content).hexdigest() 
gen_md5 = hashlib.md5(gen_file_content).hexdigest() 
print gen_md5, base_md5 

나는 하나의 창 파이썬으로 생성 된 윈도우와 다른 파이썬 생성?

Files A and B have equal text, but are not binary equal. 

를 얻을.

+3

줄 끝이 나는 것 같습니까? 덕분에'.rplace '('\ r \ n ','\ n ')'파일 내용에 Windows를 추가하고 Windows 환경에서는'\ r \ n '을 사용하고 unix (cygwin에서 에뮬레이트)는'\ n '을 사용합니다. – user590028

+1

@ user590028 문제를 해결. – JuanPablo

+0

@ user590028 제발, 당신은 대답으로 귀하의 의견을 넣을 수 있습니까? 질문을 닫으십시오. – JuanPablo

답변

0

문제는 end-of-line 인코딩 일 수 있습니다. Windows는 '\ r \ n'을 사용하는 반면 unix (cygwin에서 에뮬레이트하는)는 '\ n'을 사용합니다.