Что с бинарными файлами в Windows? - PullRequest
0 голосов
/ 05 апреля 2011

Я сделал скрипт для загрузки файла, но он работает только в Unix / Linux / OSX, когда я загружаю двоичные исполняемые файлы, файлы SWF, образы и т. Д.

\#Modfied section from PWB.py  
import sys  
if sys.version_info<(2,8):  
    import urllib as request  
else:  
    import urllib.request as request  
x=request.urlopen("http://homestarrunner.com/intro.swf")  
y=x.read()  
x.close()  
z=open("intro.swf","w")  
z.write(y)  
z.close() 

Я получу файл и обычный нечитаемый мусор в файле, но он будет нечитаемым.

Кажется, что двоичные файлы всегда имеют такие проблемы в Windows. Почему это?

PS. Как я мог написать свой код Python, чтобы он загружался?

Ответы [ 4 ]

7 голосов
/ 05 апреля 2011

Открытие двоичных файлов в двоичном режиме.

z = open("intro.swf","wb")
6 голосов
/ 05 апреля 2011

Из документации Python 2 :

В Windows 'b' добавляется в режим открывает файл в двоичном режиме, поэтому Есть также такие режимы, как «RB», «WB», и 'r + b'. Python на Windows делает различие между текстом и двоичным файлы; символы конца строки в текстовые файлы автоматически изменяются немного, когда данные читаются или пишутся. Это закулисное изменение данные файла подходят для текста ASCII файлы, но это повредит двоичные данные как это в файлах JPEG или EXE. Быть очень осторожно использовать двоичный режим, когда чтение и запись таких файлов. На Unix, не больно добавлять 'b' в режим, так что вы можете использовать его независимо от платформы для всех двоичных файлов файлы.

0 голосов
/ 05 апреля 2011

Вы должны использовать «wb» в аргументе для open (), чтобы получить его в двоичном режиме - по умолчанию текстовый режим, который преобразует \ n в CR / LF.

0 голосов
/ 05 апреля 2011

Используйте z=open("intro.swf","wb") в Windows, чтобы открыть файл в двоичном режиме.

http://docs.python.org/tutorial/inputoutput.html

...