gpt4 book ai didi

python - 在 Python 中解压缩 .bz2 文件

转载 作者:太空狗 更新时间:2023-10-29 22:00:54 26 4
gpt4 key购买 nike

所以,这是一个看似简单的问题,但我显然非常非常无聊。我有一个小脚本可以从网页下载所有 .bz2 文件,但由于某种原因,该文件的解压缩让我非常头疼。

我是一个 Python 新手,所以答案可能很明显,请帮助我。

在这段脚本中,我已经有了文件,我只是想将它读出到一个变量中,然后解压它?那正确吗?我已经尝试了各种方法来做到这一点,我通常会在这段代码的最后一行收到“ValueError:找不到流的结尾”错误。我试图打开 zip 文件并以无数种不同的方式将其写入字符串。这是最新的。

openZip = open(zipFile, "r")
s = ''
while True:
newLine = openZip.readline()
if(len(newLine)==0):
break
s+=newLine
print s
uncompressedData = bz2.decompress(s)

嗨,Alex,我应该列出我尝试过的所有其他方法,因为我已经尝试过 read() 方法。

方法一:

print 'decompressing ' + filename

fileHandle = open(zipFile)
uncompressedData = ''

while True:
s = fileHandle.read(1024)
if not s:
break
print('RAW "%s"', s)
uncompressedData += bz2.decompress(s)

uncompressedData += bz2.flush()

newFile = open(steamTF2mapdir + filename.split(".bz2")[0],"w")
newFile.write(uncompressedData)
newFile.close()

我得到错误:

uncompressedData += bz2.decompress(s)
ValueError: couldn't find end of stream

方法B

zipFile = steamTF2mapdir + filename
print 'decompressing ' + filename
fileHandle = open(zipFile)

s = fileHandle.read()
uncompressedData = bz2.decompress(s)

同样的错误:

uncompressedData = bz2.decompress(s)
ValueError: couldn't find end of stream

非常感谢您的及时回复。我真的在用头撞墙,因为无法解压缩一个简单的 .bz2 文件而感到异常沉重。

顺便说一下,使用 7zip 手动解压它,以确保该文件没有不稳定或任何东西,并且解压正常。

最佳答案

您正在打开和阅读压缩文件,就好像它是由行组成的文本文件一样。不!不是。

uncompressedData = bz2.BZ2File(zipFile).read()

似乎更接近您所钓的目标。

编辑:OP 展示了他尝试过的更多东西(尽管我没有看到任何关于尝试过最佳方法的注释——我在上面推荐的单行方法!)但是他们似乎所有人都有一个共同的错误,我重复上面的关键部分:

opening ... the compressed file as if it was a textfile ... It's NOT.

open(filename) 甚至更明确的 open(filename, 'r') 打开一个 text 文件 - - 压缩文件是二进制文件,因此为了正确读取它,您必须使用open(filename, 'rb') 打开它。 ((我推荐的 bz2.BZ2File 知道它正在处理一个压缩文件,当然,所以没有必要再告诉它任何东西))。

在 Python 2.* 中,在 Unix-y 系统(即除 Windows 之外的所有系统)中,您可以随意使用 open(但在 Python 中3.* 你不能,因为文本是 Unicode,而二进制是字节——不同的类型)。

在 Windows 中(以及在此之前的 DOS 中)区分总是不可或缺的,因为 Windows 的文本文件由于历史原因是特殊的(使用两个字节而不是一个字节来结束行,并且至少在某些情况下,取值 '\0x1A' 的字节表示文件的逻辑结尾),因此读取和写入低级代码必须补偿。

所以我怀疑 OP 正在使用 Windows 并且正在为不小心使用 'rb' 选项(“读取二进制文件”)到 open built-在。 (尽管 bz2.BZ2File 仍然更简单,无论您使用什么平台!-)。

关于python - 在 Python 中解压缩 .bz2 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1250688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com