将 zlib 压缩的 utf8 数据写入文件
Write zlib compressed utf8 data to a file
我有一个包含以 utf-8 编码的数据的文件。我想读取数据,删除空格,用换行符分隔单词,压缩整个内容并将它们写入文件。这就是我想要做的:
with codecs.open('1020104_4.utf8', encoding='utf8', mode='r') as fr :
data = re.split(r'\s+',fr.read().encode('utf8'))
#with codecs.open('out2', encoding='utf8', mode='w') as fw2 :
data2 = ('\n'.join(data)).decode('utf8')
data3 = zlib.compress(data2)
#fw2.write(data3)
但是我得到一个错误:
Traceback (most recent call last):
File "tmp2.py", line 17, in <module>
data3 = zlib.compress(data2)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 47-48: ordinal not in range(128)
如何将此数据写入文件?
我认为你的 encoding-foo 是错误的方式,在 Python 3 中这会更清楚 ☺。
首先,当你想在 解码的 数据上执行此操作时,即在你已经从 read
获得的 Unicode 字符串上,因为你正在使用 [=15] =], 所以第一行应该是
data = re.split(r'\s+', fr.read())
因此,在将数据传递给 zlib
之前,您希望通过 encoding 将其转换为 bytes
it:
data2 = ('\n'.join(data)).encode('utf8')
data3 = zlib.compress(data2)
在最后一步中,您要将其写入 binary 文件句柄:
with open("output", "wb") as fw:
fw.write(data3)
您可以使用 gzip
模块来缩短它:
with codecs.open('1020104_4.utf8', encoding='utf8', mode='r') as fr:
data = re.split(r'\s+', fr.read())
with gzip.open('out2', mode='wb') as fw2 :
data2 = ('\n'.join(data)).encode('utf8')
fw2.write(data2)
我有一个包含以 utf-8 编码的数据的文件。我想读取数据,删除空格,用换行符分隔单词,压缩整个内容并将它们写入文件。这就是我想要做的:
with codecs.open('1020104_4.utf8', encoding='utf8', mode='r') as fr :
data = re.split(r'\s+',fr.read().encode('utf8'))
#with codecs.open('out2', encoding='utf8', mode='w') as fw2 :
data2 = ('\n'.join(data)).decode('utf8')
data3 = zlib.compress(data2)
#fw2.write(data3)
但是我得到一个错误:
Traceback (most recent call last):
File "tmp2.py", line 17, in <module>
data3 = zlib.compress(data2)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 47-48: ordinal not in range(128)
如何将此数据写入文件?
我认为你的 encoding-foo 是错误的方式,在 Python 3 中这会更清楚 ☺。
首先,当你想在 解码的 数据上执行此操作时,即在你已经从 read
获得的 Unicode 字符串上,因为你正在使用 [=15] =], 所以第一行应该是
data = re.split(r'\s+', fr.read())
因此,在将数据传递给 zlib
之前,您希望通过 encoding 将其转换为 bytes
it:
data2 = ('\n'.join(data)).encode('utf8')
data3 = zlib.compress(data2)
在最后一步中,您要将其写入 binary 文件句柄:
with open("output", "wb") as fw:
fw.write(data3)
您可以使用 gzip
模块来缩短它:
with codecs.open('1020104_4.utf8', encoding='utf8', mode='r') as fr:
data = re.split(r'\s+', fr.read())
with gzip.open('out2', mode='wb') as fw2 :
data2 = ('\n'.join(data)).encode('utf8')
fw2.write(data2)