如何将 zipfile 作为 django 中的 File 对象?
Posted
技术标签:
【中文标题】如何将 zipfile 作为 django 中的 File 对象?【英文标题】:How to take a zipfile as a File object in django? 【发布时间】:2016-03-13 20:20:46 【问题描述】:我有一个名为“src”的文件夹,我在其中创建了一个名为 zf 的 zip 文件。我想将 zf 作为 FileField 对象传递给 newobj.fd。
import zipfile
from django.core.files import File
f='s1.zip'
zf = zipfile.ZipFile(f, "w")
for dirname, subdirs, files in os.walk(src):
zf.write(dirname)
for filename in files:
zf.write(os.path.join(dirname, filename))
zf.open(os.path.join(dirname, filename))
newobj.fd= File(zf)
我为一个文本文件做这件事,它可以工作:
f=file('text.txt')
newobj.fd2=File(f)
f.close()
如何为 zipfile 做同样的事情?
【问题讨论】:
【参考方案1】: import zipfile
from django.core.files import File
f='s1.zip'
zf = zipfile.ZipFile(f, "w")
for dirname, subdirs, files in os.walk(src):
zf.write(dirname)
for filename in files:
zf.write(os.path.join(dirname, filename))
zf.close()
newobj.fd = File(f)
这有什么作用?
【讨论】:
我在尝试了您的答案后这样做了,但它给出了错误:I/O operation on closed file。我删除了 zf.close() 但错误仍然存在。 给出完整的回溯(复制和粘贴)。您确定 newobj.fd = 代码正确缩进了吗? 我删除了 zf.close() 并将其替换为 zf.open(os.path.join(dirname, filename))。现在的问题是,即使没有弹出错误,但 zip 文件没有被复制到所需的位置。另一方面,文本文件被正确复制。 我改变了答案。我将关闭移出循环。添加第一个文件后它关闭了。什么是newobj? 仍然报错:I/O operation on closed file以上是关于如何将 zipfile 作为 django 中的 File 对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何将动态生成的pdf文件添加到zipfile Python?
Python - 将内存中的 ZipFile 对象加载为字节