所以我在NamedTemporaryFile函数指定的某个临时目录中创建了几个文件。
zf = zipfile.ZipFile( zipPath, mode='w' )
for file in files:
with NamedTemporaryFile(mode='w+b', bufsize=-1, prefix='tmp') as tempFile:
tempPath = tempFile.name
with open(tempPath, 'w') as f:
write stuff to tempPath with contents of the variable 'file'
zf.write(tempPath)
zf.close()
当我使用这些文件的路径添加到zip文件时,临时目录本身会被压缩 当我尝试解压缩时,我得到一系列临时文件夹,最终包含我想要的文件 (即我得到文件夹Users,其中包含我的user_id文件夹,其中包含AppData ...)。
有没有办法直接添加文件,没有文件夹,所以当我解压缩时,我直接获取文件?非常感谢你!
答案 0 :(得分:2)
尝试给出arcname:
from os import path
zf = zipfile.ZipFile( zipPath, mode='w' )
for file in files:
with NamedTemporaryFile(mode='w+b', bufsize=-1, prefix='tmp') as tempFile:
tempPath = tempFile.name
with open(tempPath, 'w') as f:
write stuff to tempPath with contents of the variable 'file'
zf.write(tempPath,arcname=path.basename(tempPath))
zf.close()
使用os.path.basename
,您可以从路径中获取文件的名称。根据{{3}}文档,arcname的默认值是filename,没有驱动器号,并且删除了前导路径分隔符。
答案 1 :(得分:1)
尝试将arcname
参数用于zf.write
:
zf.write(tempPath, arcname='Users/mrb0/Documents/things.txt')
在不了解您的计划的情况下,您可能会更容易从最外层循环中的arcname
变量获取file
,而不是从tempPath
中获取新名称。