使用zipfile压缩文件集中的文件

时间:2019-05-30 10:18:29

标签: python windows file

我需要将路径上的特定文件全部压缩在一起。 除了名称中包含SFF的文件外,我需要找到某些文件(例如AAA.txt,BBB.inf等),然后将它们全部压缩在一起。

每次运行此命令时,我的DB.zip最终都只有CCC.txt在内。这意味着脚本每次从集合中找到文件时,都会创建一个新DB.zip,其中包含该新文件,并覆盖前一个文件。我该如何解决?

import os
import zipfile

pr_directory = r'C:\Users\vijo9001\Desktop\Infact'
pr_path = os.listdir(pr_directory)
dst = r'C:\Users\vijo9001\Desktop\Infact'
os.chdir(r'C:\Users\vijo9001\Desktop\Infact')

my_set = {
"AAA",
"BBB",
"CCC"
}

for file in pr_path:
    zip_file = pr_directory + '/' + 'DB.zip'
    for x in my_set:
        if 'SFF' in file:
            continue
        if (str(x)) in file:
           zip = zipfile.ZipFile(zip_file, "w",)
           zip.write(file, compress_type=zipfile.ZIP_DEFLATED)
           zip.close()

1 个答案:

答案 0 :(得分:0)

关于我发现的代码,您可能需要进行一些优化/更正:

  1. zip在每次迭代中都通过for循环实例化,彼此覆盖。 这意味着您将为文件“ AAA1.txt”生成一个DB.zip文件,然后用仅包含文件“ AAA2.txt”的DB.zip覆盖它,依此类推。通过在for循环之前启动zip,您将依次添加每个文件,从而生成一个包含所有文件的DB.zip。
  2. 除了对my_set中的每个元素使用for循环之外,您还可以使用具有以下条件的简单if语句:if any(x in file_split for x in my_set)
  3. zip_file仅需要在for循环之前移动,以正确声明zip
  4. zip遮盖了zip库,以便提供更好的清晰度和避免错误,因此最好对变量进行重命名(我在下面的代码中使用zip_dir)

我玩了一些您的代码,并提出了以下代码段:

my_set = {"AAA", "BBB", "CCC"}

zip_file = pr_directory + '/' + 'DB.zip'
zip_dir = zipfile.ZipFile(zip_file, "w",)

for file in pr_path:
    if 'SFF' in file:
        continue
    if any(x in file for x in my_set):
        zip_dir.write(file, compress_type=zipfile.ZIP_DEFLATED)

zip_dir.close()

这对我来说似乎很好。希望我能帮上忙。