2012-10-22 53 views
1

我試圖在某個目錄中打印文件擴展名和每個擴展名的計數。Python計數文件擴展名

這是我迄今爲止...

import os 
import glob 

os.chdir(r"C:\Python32\test") 
x = glob.glob("*.*") 
for i x: 
    print(i) 

>>> file1.py 
    file2.py 
    file3.py 
    file4.docx 
    file5.csv 

所以我堅持,我需要我的整體輸出是...

py 3 
docx 1 
csv 1 

我曾嘗試使用類似i.split(「。」),但我卡住了。我想我需要把擴展名放在一個列表中,然後計算列表,但這是我遇到問題的地方。

感謝您的幫助。

+0

創建一個新的空字典,如果擴展沒有按」 t存在添加一個新條目並將該值設置爲1,如果它已經存在,則增加1 – TheZ

+0

您確定沒有運行上述代碼的'SyntaxError'嗎? –

+0

[計數Python中具有特定擴展名的文件數量]的可能重複(http://stackoverflow.com/questions/1320731/count-number-of-files-with-certain-extension-in-python) – dbn

回答

7

使用os.path.splitext找到擴展名,並使用collections.Counter來計算擴展的類型。

import os 
import glob 
import collections 

dirpath = r"C:\Python32\test" 
os.chdir(dirpath) 
cnt = collections.Counter() 
for filename in glob.glob("*"): 
    name, ext = os.path.splitext(filename) 
    cnt[ext] += 1 
print(cnt) 
2

你可以使用collections.Counter

from collections import Counter 
import os 
ext_count = Counter((ext for base, ext in (os.path.splitext(fname) for fname in your_list))) 
0

此實現將統計每個擴展的出現,放入變量c。通過使用most_common方法櫃檯上,將先打印最常見的擴展,你在你的例子輸出有

from os.path import join, splitext 
from glob import glob 
from collections import Counter 

path = r'C:\Python32\test' 

c = Counter([splitext(i)[1][1:] for i in glob(join(path, '*'))]) 
for ext, count in c.most_common(): 
    print ext, count 

輸出

py 3 
docx 1 
csv 1