2012-09-05 16 views
0

如果我有一個目錄「C:\文件」包含一堆文件:如何在python中壓縮相同前綴的文件?

A_File1 A_File2 B_File1 B_File2

什麼是通過文件迭代來壓縮的任何文件的最好方法在一個zip文件中使用相同的前綴?例如,輸出將是「A.zip」和「B.zip」及其相關文件。

我知道如何通過文件迭代:

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

但我不知道什麼是最好的方式拉上的文件是或者是否有一些Python庫,以幫助。

+0

http://effbot.org/librarybook/zipfile.htm –

+0

什麼限制一個公共前綴?只是下劃線之前的字符? – sberry

回答

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) 
1

標準庫中使用glob模塊,而不是os.listdir:

from glob import glob 

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

(如果使用反斜槓分離迪爾斯,使用兩個,因爲一個單一的一個是Python中一個轉義字符)

+0

或者您可以使用原始字符串'r'C:\ FILES \ A_File'' –

+0

或者您可以使用''C:/ FILES/A_File'' –

0
for fname in glob.glob('c:\files\A_*'): 
    print fname 
相關問題