首页 > 解决方案 > 压缩文件并保存到特定文件夹

问题描述

这可能是一个愚蠢的问题,但我正在努力寻找解决方案。

所以我在给定文件夹中有一个文件:

Output\20190101_0100\20190101_0100.csv

现在我想压缩文件并将其保存到相同的位置。所以这是我的尝试:

zipfile.ZipFile('Output/20190101_0100/20190101_0100_11.zip', mode='w', compression=zipfile.ZIP_DEFLATED).write('Output/20190101_0100/20190101_0100_11.csv')

但它正在制作一个文件夹内部 zip 文件夹并保存它,如下所示:

Output\20190101_0100\20190101_0100_11.zip\Output\20190101_0100\20190101_0100_11.csv

有人可以告诉我如何将我的文件直接保存在下面提到的相同位置或位置:

Output\20190101_0100\20190101_0100_11.zip\20190101_0100_11.csv

标签: pythonpython-3.xzipzipfile

解决方案


问题的改写

这个问题有点令人困惑,因为Output\20190101_0100\20190101_0100_11.zip\Output\20190101_0100\20190101_0100_11.csv它不是文件,而是Output\20190101_0100\20190101_0100_11.csvzip 文件中的一个文件Output\20190101_0100\20190101_0100_11.zip(如果我没记错的话)

只是为了重申您的问题(如果我理解正确的话):

  • 你有一个文件Output\20190101_0100\20190101_0100.csv(->子目录20190101_0100.csv中的一个文件)Output20190101_0100
  • 您要创建 zip 文件Output/20190101_0100/20190101_0100_11.zip20190101_0100_11.zipOutput->20190101_0100.zip目录中)
  • 您想要添加上述 CSV 文件Output\20190101_0100\20190101_0100.csv但没有前导路径,即 as20190101_0100_11.csv而不是Output\20190101_0100\20190101_0100.csv.

或者为了不与太多类似的目录混淆,让我们将其简化为:

  • test.csv在子目录中有一个文件sub-folder
  • 您要创建 zip 文件test.zip
  • 您想要添加上述 CSV 文件test.csv但没有前导路径,即 astest.csv而不是sub-folder/test.csv.

回答

ZipFile.write文档中:

将名为filename的文件写入存档,并为其指定存档名称arcname(默认情况下,这将与filename相同,但没有驱动器号并删除了前导路径分隔符)。

这意味着arcname它将默认为传入的filename(它没有驱动器号或前导路径分隔符)。

如果要删除子文件夹部分,也只需传入arcname。例如:

import zipfile

with zipfile.ZipFile('path-to-zip/test.zip', 'w') as zf:
    zf.write('sub-folder/test.csv', arcname='test.csv')

推荐阅读