压缩文件并保存到特定文件夹

Zip file and save to specific folder

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

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

Output190101_0100190101_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')

但是是制作一个文件夹insider zip文件夹并保存,如下图:

Output190101_0100190101_0100_11.zip\Output190101_0100190101_0100_11.csv

谁能告诉我如何将我的文件直接保存在同一位置或下面提到的位置:

Output190101_0100190101_0100_11.zip190101_0100_11.csv

您可以尝试使用原始路径:

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

改写问题

这个问题有点令人困惑,因为 Output190101_0100190101_0100_11.zip\Output190101_0100190101_0100_11.csv 不是一个文件,而是 Output190101_0100190101_0100_11.csv 是压缩文件 Output190101_0100190101_0100_11.zip 中的一个文件(如果我没记错的话)

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

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

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

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

回答

来自 ZipFile.write 文档:

Write the file named filename to the archive, giving it the archive name arcname (by default, this will be the same as filename, but without a drive letter and with leading path separators removed).

这意味着 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')