2011-07-06 4 views
1

저는 파이썬 (그리고 프로그래밍 전반)에 상당히 익숙하며, 인터넷에서 미디 파일을 가져 오는 프로그램을 작성하는 동안 문제가 발생했습니다. 방법이하지 않는 동안,urlretrive 및 urlopen을 사용하여 동일한 URL에 액세스하면 다른 파일로 끝납니다. 왜?

#method one 
url = "http://.../asfd.mid" 
urllib.urlretrieve(url, "C:\...\this_is_file_one.mid") 

#method two 
g = urllib2.urlopen(url).read() 
open("this_is_file_two.mid", "w").write(g) 

방법의 하나가 유효한 MIDI 파일을 생성합니다 : 다음 나는 두 개의 동일한 파일을 기록 할 것으로 예상 몇 가지 코드입니다. 16 진수 편집기에서 두 파일을 비교했을 때 유효하지 않은 파일 (file_two)에 유효한 파일에서 발생한 각 '0A'앞에 추가 바이트 인 '0D'가 있음을 발견했습니다. 나는 약간의 복사 - 붙여 넣기 - 다른 차이점이 있는지 비교하기 위해 비교했지만 아무 것도 나타나지 않았습니다. 그래도 내가 찾지 못한 차이가 더 쉬울 수 있습니다. 같은 문제가 다른 URL에서 발생합니다.

내가 곤혹 스럽다. 어떤 조명이라도 대단히 감사하겠습니다.

감사합니다.

+0

"텍스트 모드"vs "바이너리 모드". –

+0

[0A hex bug with file to write?] (http://stackoverflow.com/questions/4154369/0a-hex-bug-on-writing-to-file)도 참조하십시오. (근본적으로 같은 문제이지만, 답을 알고 있어야하므로 중복되지 않습니다.) –

답변

4

urllib.urlretrieve() 바이너리 모드로 저장하려면 파일을 엽니 다.

open("this_is_file_two.mid", "wb").write(g) 
+0

환상적입니다. 문제를 해결했습니다. – user830904