首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bz2和python对文本文件进行“适当”压缩和解压缩

如何使用bz2和python对文本文件进行“适当”压缩和解压缩
EN

Stack Overflow用户
提问于 2021-06-05 12:30:19
回答 1查看 138关注 0票数 0

因此,我已经有了这个系统,它现在使用bz2压缩来抓取和压缩文件。它的实现方式是使用我几个月前在so上找到的以下代码块:

为了实现本文的目的,我们假设文件名始终是file.XXXX,其中XXXX是相关的扩展名。我们从.txt开始

代码语言:javascript
复制
### 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以及所有的工具。我似乎遗漏了一些东西,我不确定是什么。

下面是我到目前为止所掌握的代码,我想知道这段代码的错误之处:

代码语言:javascript
复制
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“问题而崩溃。我认为第一个上下文管理器输出一个二进制文本文件,我尝试解码它,但也失败了。我错过了什么我觉得自己像个菜鸟。

如果您希望使用最少的可运行代码来复制此文件,请添加以下代码以创建一个虚拟文件:

代码语言:javascript
复制
lines = ["Line 1","Line 2", "Line 3"]

with open("file.txt", "w") as f:
    for line in lines:
        f.write(line+"\n")
EN

回答 1

Stack Overflow用户

发布于 2021-06-05 14:50:11

您正在制作的文件不是.tar.bz2文件,而是.bz2.bz2文件。您使用bzip2压缩了两次(第二次没有效果),并且看不到生成tar文件的迹象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67846282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档