我需要将路径上的特定文件全部压缩在一起。 我需要找到某些文件(例如: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()
最佳答案
我发现您的代码有一些您可能想要优化/更正的地方:
zip
在每次迭代中通过 for 循环进行实例化,并相互覆盖。 这意味着您将为文件“AAA1.txt”生成一个 DB.zip 文件,然后用仅包含文件“AAA2.txt”的 DB.zip 覆盖它,依此类推。通过在 for 循环之前启动 zip,您将依次添加每个文件,生成包含所有文件的单个 DB.zip。- 您可以使用具有以下条件的简单 if 语句,而不是对 my_set 中的每个元素使用 for 循环:
if any(x in file_split for x in my_set)
zip_file
只需要在 for 循环之前移动即可正确声明zip
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()
这对我来说似乎很有效。希望我能有所帮助。
关于python - 使用 zipfile 从一组文件中压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56376274/