写入文本到gzip文件

33

按照在博客和其他帖子中找到的教程和示例,似乎将字符串原样写入一个 .gz 文件的方法是以二进制模式打开它并写入:

import gzip
with gzip.open('file.gz', 'wb') as f:
    f.write('Hello world!')

我尝试了一下,结果得到了以下异常:

  File "C:\Users\Tal\Anaconda3\lib\gzip.py", line 258, in write
    data = memoryview(data)
TypeError: memoryview: a bytes-like object is required, not 'str'

所以我尝试在文本模式下打开文件:

import gzip
with gzip.open('file.gz', 'w') as f:
    f.write('Hello world!')

但是我收到了相同的错误:

  File "C:\Users\Tal\Anaconda3\lib\gzip.py", line 258, in write
    data = memoryview(data)
TypeError: memoryview: a bytes-like object is required, not 'str'

如何在Python3中解决这个问题?

1个回答

60

mode='wb'

在二进制模式下写入文件时,必须写入字节而不是字符串。使用str.encode对字符串进行编码:

with gzip.open('file.gz', 'wb') as f:
    f.write('Hello world!'.encode())

mode='wt'

(由 OP 发现) 或者,你可以在以 wt(显式的文本)模式打开文件时将字符串写入文件:

with gzip.open('file.gz', 'wt') as f:
    f.write('Hello world!')

这份文档提供了一些方便易用的使用示例。


1
直接写b'Hello world!'代替'Hello world!'.encode() - Sven
8
@Sven 这个例子是为了演示如何通过变量编写字符串 -- 你需要调用string.encode()。我假设这样解释会更容易理解。 - cs95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接