因此,我已经有了这个系统,它现在使用bz2压缩来抓取和压缩文件。它的实现方式是使用我几个月前在so上找到的以下代码块:
为了实现本文的目的,我们假设文件名始终是file.XXXX,其中XXXX是相关的扩展名。我们从.txt开始
### How to compress a text file
filepath_compressed = "file.tar.bz2"
with open("file.txt", 'rb') as data:
tarbz2contents = bz2.compress(data.read(), 9)
with bz2.BZ2File(filepath_compressed, 'wb') as f_comp:
f_comp.write(tarbz2contents)现在,为了解压它,我总是使用一个我称为Keka的解压软件让它工作,它将.tar.bz2文件解压成.tar,然后我再次通过Keka运行它,得到一个“无扩展”文件,然后我在mac上添加一个.txt,然后它就可以工作了。
现在,为了以编程的方式进行解压缩,我尝试了一些方法。我尝试过来自this post的东西和来自this post的代码。我尝试过使用BZ2Decompressor和BZ2File以及所有的工具。我似乎遗漏了一些东西,我不确定是什么。
下面是我到目前为止所掌握的代码,我想知道这段代码的错误之处:
import bz2, tarfile, shutil
# Decompress to tar
with bz2.BZ2File("file.tar.bz2") as fr, open("file.tar", "wb") as fw:
shutil.copyfileobj(fr, fw)
# Decompress from tar to txt
with tarfile.open("file.tar", "r:") as tar:
tar.extractall("file_out.txt")这段代码因为"tarfile.ReadError: truncated header“问题而崩溃。我认为第一个上下文管理器输出一个二进制文本文件,我尝试解码它,但也失败了。我错过了什么我觉得自己像个菜鸟。
如果您希望使用最少的可运行代码来复制此文件,请添加以下代码以创建一个虚拟文件:
lines = ["Line 1","Line 2", "Line 3"]
with open("file.txt", "w") as f:
for line in lines:
f.write(line+"\n")发布于 2021-06-05 14:50:11
您正在制作的文件不是.tar.bz2文件,而是.bz2.bz2文件。您使用bzip2压缩了两次(第二次没有效果),并且看不到生成tar文件的迹象。
https://stackoverflow.com/questions/67846282
复制相似问题