0

因此,我在 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 文件时,临时目录本身会被压缩。
当我尝试解压缩时,我得到了一系列临时文件夹,其中最终包含我想要的文件。
(即我得到文件夹用户,其中包含我的 user_id 文件夹,其中包含 AppData...)。

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

4

2 回答 2

2

尝试给出弧名:

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您可以从路径中获取文件名。根据zipfile文档,arcname 的默认值是没有驱动器号的文件名,并且删除了前导路径分隔符。

于 2012-08-01T12:31:50.107 回答
1

尝试使用arcname参数来zf.write

zf.write(tempPath, arcname='Users/mrb0/Documents/things.txt')

在不了解您的程序的更多信息的情况下,您可能会发现从最外层循环中arcname的变量中获取您的file变量比从tempPath.

于 2012-08-01T12:29:46.993 回答