如果我有一個目錄「C:\文件」包含一堆文件:如何在python中壓縮相同前綴的文件?
A_File1 A_File2 B_File1 B_File2
什麼是通過文件迭代來壓縮的任何文件的最好方法在一個zip文件中使用相同的前綴?例如,輸出將是「A.zip」和「B.zip」及其相關文件。
我知道如何通過文件迭代:
for item in os.listdir("C:\FILES"):
但我不知道什麼是最好的方式拉上的文件是或者是否有一些Python庫,以幫助。
如果我有一個目錄「C:\文件」包含一堆文件:如何在python中壓縮相同前綴的文件?
A_File1 A_File2 B_File1 B_File2
什麼是通過文件迭代來壓縮的任何文件的最好方法在一個zip文件中使用相同的前綴?例如,輸出將是「A.zip」和「B.zip」及其相關文件。
我知道如何通過文件迭代:
for item in os.listdir("C:\FILES"):
但我不知道什麼是最好的方式拉上的文件是或者是否有一些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)
標準庫中使用glob模塊,而不是os.listdir:
from glob import glob
for file in glob("C:\\FILES\\A_File*"):
...
(如果使用反斜槓分離迪爾斯,使用兩個,因爲一個單一的一個是Python中一個轉義字符)
或者您可以使用原始字符串'r'C:\ FILES \ A_File'' –
或者您可以使用''C:/ FILES/A_File'' –
for fname in glob.glob('c:\files\A_*'):
print fname
http://effbot.org/librarybook/zipfile.htm –
什麼限制一個公共前綴?只是下劃線之前的字符? – sberry