0

如果我有一个包含一堆文件的目录“C:\Files”:

A_File1 A_File2 B_File1 B_File2

遍历文件以将具有相同前缀的任何文件压缩到单个 zip 文件中的最佳方法是什么?例如,输出将是“A.zip”和“B.zip”及其相关文件。

我知道如何遍历文件:

for item in os.listdir("C:\FILES"):

但我不知道压缩文件的最佳方法是什么,或者是否有一些 python 库可以帮助解决这个问题。

4

3 回答 3

1

使用标准库中的 glob 模块,而不是 os.listdir:

from glob import glob

for file in glob("C:\\FILES\\A_File*"):
    ...

(如果您使用反斜杠分隔目录,请使用两个,因为单个是 Python 字符串中的转义字符)

于 2012-09-05T03:56:04.883 回答
1

这假定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)
于 2012-09-05T04:08:08.623 回答
0
for fname in glob.glob('c:\files\A_*'):
    print fname
于 2012-09-05T03:57:16.223 回答