Журнал ASPects ASP имеет подробное описание о том, как подписать код (Необходимо быть участником для чтения статьи). Можно загрузить его до , http://www.asp-shareware.org/
Вот является ссылкой на описание, как Вы можете делать свое собственное свидетельство об испытании .
Это могло бы также быть интересно.
Вы открываете и читаете сжатый файл, как если бы это был текстовый файл, состоящий из строк. НЕ! Это НЕ.
uncompressedData = bz2.BZ2File(zipFile).read()
кажется ближе к тому, на что вы ловите.
Правка : ОП показал еще несколько вещей, которые он пробовал (хотя я не вижу никаких заметок о том, что пробовал лучшее метод - однострочный, который я рекомендую выше!), но, похоже, все они имеют одну общую ошибку, и я повторяю ключевые биты сверху:
открытие ... сжатый файл, как если бы это был текстовый файл ... Это НЕ.
open (filename)
и даже более явный open (filename, 'r')
open для чтения text - сжатый файл представляет собой двоичный файл, поэтому для правильного чтения вы должны открыть его с помощью open (filename, 'rb')
. ((рекомендуемый мной bz2.BZ2File
ЗНАЕТ, что имеет дело со сжатым файлом, конечно, поэтому нет необходимости рассказывать больше)).
В Python 2. *
, в системах Unix-y (то есть во всех системах, кроме Windows) вы можете избежать небрежного использования open
(но в Python 3. *
вы не можете, поскольку текст - это Unicode, а двоичный - это байты - разные типы).
В Windows (и до этого в DOS) это ' всегда было необходимо различать, поскольку текстовые файлы Windows по историческим причинам являются своеобразными (используйте два байта, а не один в конце строки и, по крайней мере, в некоторых случаях, берите значение байта '\ 0x1A'
, что означает логический конец файла), поэтому чтение и запись низкоуровневого кода должны компенсировать.
Поэтому я подозреваю, что OP использует Windows и расплачивается за неосторожное использование 'rb' Опция
(«чтение двоичного кода») для open
встроенной. (хотя bz2.BZ2File
все еще проще, какую бы платформу вы ни использовали! -).
Поэтому я подозреваю, что OP использует Windows и расплачивается за неосторожное использование 'rb '
опция ("чтение двоичного кода") для open
встроенной. (хотя bz2.BZ2File
все еще проще, какую бы платформу вы ни использовали! -).
Поэтому я подозреваю, что OP использует Windows и расплачивается за неосторожное использование 'rb '
опция ("чтение двоичного кода") для open
встроенной. (хотя bz2.BZ2File
все еще проще, какую бы платформу вы ни использовали! -).
openZip = open (zipFile, "r")
Если вы работаете в Windows, вы можете сказать здесь openZip = open (zipFile, "rb") , поскольку файл, скорее всего, будет содержать комбинации CR / LF, а вы не хотите, чтобы они были переведены.
newLine = openZip.readline ()
Как заметил Алекс, это очень неправильно, поскольку концепция «строк» чужда сжатому потоку.
s = fileHandle. читать (1024) [...] uncompressedData + = bz2.decompress (s)
Это неверно по той же причине. Блоки размером 1024 байта вряд ли будут иметь большое значение для декомпрессора, поскольку он захочет работать с собственным размером блока.
s = fileHandle.read () uncompressedData = bz2.decompress (s)
Если это не сработает, я бы сказал, что это проблема перевода новой строки, о которой я упоминал выше.