如何将内存中的zipfile写入文件?
# Create in memory zip and add files
zf = zipfile.ZipFile(StringIO.StringIO(), mode='w',compression=zipfile.ZIP_DEFLATED)
zf.writestr('file1.txt', "hi")
zf.writestr('file2.txt', "hi")
# Need to write it out
f = file("C:/path/my_zip.zip", "w")
f.write(zf) # what to do here? Also tried f.write(zf.read())
f.close()
zf.close()
with ZipFile(read_file, 'r') as zipread:
with ZipFile(file_write_buffer, 'w', ZIP_DEFLATED) as zipwrite:
for item in zipread.infolist():
# Copy all ZipInfo attributes for each file since defaults are not preseved
dest.CRC = item.CRC
dest.date_time = item.date_time
dest.create_system = item.create_system
dest.compress_type = item.compress_type
dest.external_attr = item.external_attr
dest.compress_size = item.compress_size
dest.file_size = item.file_size
dest.header_offset = item.header_offset
在zip文件读取损坏的情况下,您注意到缺少符号链接或带有错误时间戳的损坏文件,这可能是文件属性没有被复制过来的事实。
上面的代码片段就是我如何解决这个问题的。
修改falsetru对python3的回答
1) 使用io.StringIO
而不是StringIO.StringIO
蟒蛇中的StringIO 3
2) 使用b“abc”
代替“abc”
,或
python 3.5:TypeError:写入文件时,需要类似字节的对象,而不是“str”
3) 编码为二进制字符串str.encode(s,“utf-8”)
在Python3中将字符串转换为字节的最佳方法?
import zipfile
import io
mf = io.BytesIO()
with zipfile.ZipFile(mf, mode="w",compression=zipfile.ZIP_DEFLATED) as zf:
zf.writestr('file1.txt', b"hi")
zf.writestr('file2.txt', str.encode("hi"))
zf.writestr('file3.txt', str.encode("hi",'utf-8'))
with open("a.txt.zip", "wb") as f: # use `wb` mode
f.write(mf.getvalue())
这也适用于gzip:如何在Python中压缩字符串?
StringIO. getvalue
返回StringIO
的内容:
>>> import StringIO
>>> f = StringIO.StringIO()
>>> f.write('asdf')
>>> f.getvalue()
'asdf'
或者,您可以使用seek
更改文件的位置:
>>> f.read()
''
>>> f.seek(0)
>>> f.read()
'asdf'
请尝试以下操作:
mf = StringIO.StringIO()
with zipfile.ZipFile(mf, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
zf.writestr('file1.txt', "hi")
zf.writestr('file2.txt', "hi")
with open("C:/path/my_zip.zip", "wb") as f: # use `wb` mode
f.write(mf.getvalue())
问题内容: 是否有一个Python库,可以在不使用实际磁盘文件的情况下操纵内存中的zip存档? ZipFile库不允许您更新存档。唯一的方法似乎是将其提取到目录中,进行更改,然后从该目录中创建新的zip。我想修改没有磁盘访问权限的zip归档文件,因为我将下载它们,进行更改并再次上传它们,因此没有理由存储它们。 尽管几乎没有任何接口可以避免磁盘访问,但类似于Java的ZipInputStream /
我想写一个字节向量,
下面是通过FileBrowser将文件添加到目录的事件的问题。加载单个文件会产生一堆事件: 我认为消息的数量取决于上传zip文件的时间。我不知道如何用watchdog来解决它,下面是代码:
问题内容: 我正在下载包含XML的压缩文件,由于延迟要求,我希望避免在操作之前将zip文件写入磁盘。但是,这不足以满足我的需求。没有办法说“这是一个zip文件的字节数组,请使用它”而不将其转换为流,并且它不可靠,因为它会扫描条目标头(请参阅EDIT下面的讨论,以了解为什么它不可靠)。 我尚无法访问要处理的zip文件,因此我不知道我是否能够通过来处理它们,因此我需要找到一种适用于任何有效ZIP文件的
问题内容: 如何解压缩到内存? 我尝试(返回上): 问题答案: 提取到文件系统,因此您将无法获得所需的内容。若要提取内存中的文件,请使用方法。 如果您确实需要内存中的全部内容,则可以执行以下操作:
本文向大家介绍Python读写zip压缩文件的方法,包括了Python读写zip压缩文件的方法的使用技巧和注意事项,需要的朋友参考一下 Python 内置的 zipfile 模块可以对文件(夹)进行ZIP格式的压缩和读取操作。要进行相关操作,首先需要实例化一个 ZipFile 对象。ZipFile 接受一个字符串格式压缩包名称作为它的必选参数,第二个参数为可选参数,表示打开模式,类似于文件操作,有