Если я использую urlretrive и urlopen для доступа к одному и тому же URL, я получаю разные файлы.Зачем? - PullRequest
1 голос
/ 06 июля 2011

Я довольно плохо знаком с python (и программированием в целом), и у меня возникли некоторые проблемы при написании программы для извлечения миди-файлов из Интернета.Ниже приведен код, который я ожидал записать в два идентичных файла:

#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-файл, а второй - нет.Когда я сравнил эти два файла в шестнадцатеричном редакторе, я обнаружил, что в недействительном файле (file_two) был добавлен дополнительный байт «0D», вставленный перед каждым «0A» в допустимом файле.Я сделал небольшое сравнение копирование-вставка, чтобы увидеть, есть ли другие различия, но ничего не появилось.Впрочем, могло быть и больше различий, которых я не нашел.Та же проблема происходит с другим URL.

Я в тупике.Любое освещение будет с благодарностью.

Спасибо.

1 Ответ

4 голосов
/ 06 июля 2011

urllib.urlretrieve() открывает файл для сохранения в двоичном режиме.

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