Прочитайте zip и напишите его в другой файл python - PullRequest
5 голосов
/ 24 ноября 2011

Я хочу прочитать файл и записать его обратно.Вот мой код:

   file = open( zipname , 'r' )
   content =  file.read() 
   file.close()

   alt = open('x.zip', 'w')
   alt.write(content )
   alt.close()

Это не работает, почему ?????

Редактировать:

Переписанный файл поврежден (python 2.7.1 вкл.окна)

Ответы [ 3 ]

9 голосов
/ 24 ноября 2011

Чтение и запись в двоичном режиме, 'rb' и 'wb':

f = open(zipname , 'rb')
content =  f.read() 
f.close()

alt = open('x.zip', 'wb')
alt.write(content )
alt.close()

Причина, по которой текстовый режим не работает в Windows, заключается в том, что перевод новой строки из '\ r \ n'to' \ r 'искалечил двоичные данные в zip-файле.

6 голосов
/ 24 ноября 2011

С этот бит руководства :

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

1 голос
/ 24 ноября 2011

Если я запускаю эту программу на моем компьютере с OS X или Linux, она работает точно так, как вы ожидаете. Файл x.zip имеет точно такую ​​же контрольную сумму, что и исходный zip-файл, и не поврежден. Я считаю, что Windows является одной из платформ, где вам нужно явно открывать файлы в двоичном режиме; попробуйте:

file = open(zipname, 'rb')
...