使用zipfi从集合压缩文件

2024-09-27 07:18:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

每次我运行它时,我的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()

Tags: 文件intxtdbosprzipusers
1条回答
网友
1楼 · 发布于 2024-09-27 07:18:48

关于我发现的代码,您可能需要优化/纠正以下几点:

  1. zip通过for循环在每个迭代中实例化,并相互覆盖。 这意味着您将为文件“AAA1.txt”生成一个DB.zip文件,然后用只包含文件“AAA2.txt”的DB.zip文件覆盖它,依此类推。通过在for循环之前启动zip,您将依次添加每个文件,生成一个包含所有文件的DB.zip
  2. 您可以使用具有以下条件的简单if语句,而不是为my_集中的每个元素使用for循环:if any(x in file_split for x in my_set)
  3. zip_file只需在for循环之前移动,即可正确地执行declarzip
  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()

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

相关问题 更多 >

    热门问题