gpt4 book ai didi

Python 3 内存 Zipfile 错误。应为字符串参数,得到 'bytes'

转载 作者:IT老高 更新时间:2023-10-28 22:02:51 31 4
gpt4 key购买 nike

我有以下代码来创建内存中的 zip 文件,该文件在 Python 3 中运行时会引发错误。

from io import StringIO
from pprint import pprint
import zipfile


in_memory_data = StringIO()
in_memory_zip = zipfile.ZipFile(
in_memory_data, "w", zipfile.ZIP_DEFLATED, False)
in_memory_zip.debug = 3

filename_in_zip = 'test_filename.txt'
file_contents = 'asdf'

in_memory_zip.writestr(filename_in_zip, file_contents)

需要明确的是,这只是 Python 3 的问题。我可以在 Python 2 上很好地运行代码。确切地说,我使用的是 Python 3.4.3。堆栈跟踪如下:

Traceback (most recent call last):
File "in_memory_zip_debug.py", line 14, in <module>
in_memory_zip.writestr(filename_in_zip, file_contents)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/zipfile.py", line 1453, in writestr
self.fp.write(zinfo.FileHeader(zip64))
TypeError: string argument expected, got 'bytes'
Exception ignored in: <bound method ZipFile.__del__ of <zipfile.ZipFile object at 0x1006e1ef0>>
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/zipfile.py", line 1466, in __del__
self.close()
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/zipfile.py", line 1573, in close
self.fp.write(endrec)
TypeError: string argument expected, got 'bytes'

最佳答案

ZipFile 将其数据写入字节,而不是字符串。这意味着您必须在 Python 3 上使用 BytesIO 而不是 StringIO

字节和字符串之间的区别在 Python 3 中是新的。six如果您希望您的程序与两者兼容,那么兼容性库有一个适用于 Python 2 的 BytesIO 类。

关于Python 3 内存 Zipfile 错误。应为字符串参数,得到 'bytes',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075135/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com