从gzip文件到python中文本的字节

Posted

技术标签:

【中文标题】从gzip文件到python中文本的字节【英文标题】:Bytes from gzip file to text in python 【发布时间】:2016-10-08 19:18:03 【问题描述】:

一旦 gzip 文件的内容被提取到一个名为text 的字符串中,它看起来就像是乱码。我怎样才能把它变成人类可读的东西?

with open("zipped_ex.gz.2016") as f:
    text = f.read()
    print text

注意:我不是在寻找从 zipper_ex_gz.2016 到内容的方法。相反,我正在寻找一种从字节串到内容的方法。

【问题讨论】:

当您搜索 从 zip 字节读取特定文件时也会弹出此 Q - 为此 - 您需要打开 zip my_zip = ZipFile('path/to/my.zip),打开里面的文件直接压缩file_in_zip = my_zip.open('path/inside/zip', "r")file_in_zip.read()进行读取,也可以指定最大读取字节数-docs.python.org/3/library/zipfile.html#zipfile.ZipFile.open 【参考方案1】:
import gzip
with gzip.GzipFile("zipped_ex.gz.2016") as f:
    text = f.read()
    print text

在磁盘上,该文件是人类无法阅读的二进制 blop。 要使用存档中的数据,您需要了解如何提取它。

在这种情况下,通过GzipFile 模块在内存中“即时”解压缩存档,因此当您执行f.read() 时,您将获得存档内容,而不是磁盘上存档的二进制内容。

可以在bytes 字符串上使用相同的模块:

import io
import gzip

f = io.BytesIO(b"Your compressed gzip-file content here")
with gzip.GzipFile(fileobj=f) as fh:
    plain_text = fh.read()
    print(plain_text)

注意: gzip 文件实际上是用 gzip 格式压缩的单个数据单元,显然。但是,如果您想在 gzip 文件中使用 tar 文件,如果您有大量通过 tar 压缩的文本文件,请查看以下问题:How do I compress a folder with the Python GZip module?

【讨论】:

对不起,如果我想从文件 -> 内容中去,那会起作用,但我想从字节串到内容。对于没有在问题中更清楚地说明这一点,我深表歉意。 @Someone_Else 当您说 from bytesstring 时,您指的是从套接字接收的字节数据吗?如果是这样,这个选项仍然可行。 我的意思是从文件上调用普通 f.read() 函数的结果。 (我知道这听起来很愚蠢,但我正在使用远程主机做一些事情,以至于在原始文件上调用 gzip.GzipFile 不是一种选择。) @Someone_Else,查看我最新的答案插件。在那里,您可以将 bytes 字符串转换为虚拟文件句柄(我认为 gzip 需要),然后将其转换为纯文本。

以上是关于从gzip文件到python中文本的字节的主要内容,如果未能解决你的问题,请参考以下文章

您如何将 zip 文件中的文件作为文本而不是字节读取?

python gzip文件在内存中并上传到s3

python 怎么读取网络zip字节流,并保存到本地zip文件中?

将字节数组中的文件写入 zip 文件

Python 使用文件字节访问 zip 文件并遍历每个文件以将它们保存到数据帧中返回未找到文件的错误

使用管道在 Perl 中将管道文件输出到 gzip 的 Python 等效项