如果我有一个包含一堆文件的目录“C:\Files”:
A_File1 A_File2 B_File1 B_File2
遍历文件以将具有相同前缀的任何文件压缩到单个 zip 文件中的最佳方法是什么?例如,输出将是“A.zip”和“B.zip”及其相关文件。
我知道如何遍历文件:
for item in os.listdir("C:\FILES"):
但我不知道压缩文件的最佳方法是什么,或者是否有一些 python 库可以帮助解决这个问题。
如果我有一个包含一堆文件的目录“C:\Files”:
A_File1 A_File2 B_File1 B_File2
遍历文件以将具有相同前缀的任何文件压缩到单个 zip 文件中的最佳方法是什么?例如,输出将是“A.zip”和“B.zip”及其相关文件。
我知道如何遍历文件:
for item in os.listdir("C:\FILES"):
但我不知道压缩文件的最佳方法是什么,或者是否有一些 python 库可以帮助解决这个问题。
使用标准库中的 glob 模块,而不是 os.listdir:
from glob import glob
for file in glob("C:\\FILES\\A_File*"):
...
(如果您使用反斜杠分隔目录,请使用两个,因为单个是 Python 字符串中的转义字符)
这假定C:\FILES\
仅包含您要压缩的文件,并且每个文件的格式为PREFIX_*
.
import glob, os
import zipfile
import defaultdict
# We organize the file names in a dict to
# make writing out the zip files easier
d = defaultdict(list)
for fname in glob.glob(r'C:\FILES\*'):
d[fname.split('_')[0]].append(fname)
# Now we go through each file by letter
for letter in d:
with zipfile.ZipFile(letter+'.zip','w') as f:
for filename in d[letter]:
f.write(filename, os.path.basename(filename), zipfile.ZIP_DEFLATED)
for fname in glob.glob('c:\files\A_*'):
print fname