仅压缩Python中的文件

时间:2012-08-01 12:23:48

标签: python

所以我在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 ...)。

有没有办法直接添加文件,没有文件夹,所以当我解压缩时,我直接获取文件?非常感谢你!

2 个答案:

答案 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中获取新名称。