2013-10-29 46 views
0

這裏是新手問題!通過python文件擴展名獲得總和

我想通過目錄中的文件擴展名來獲得文件大小的總和。到目前爲止,我正在使用此修改後的版本(通過Python - Acquiring a count of file extensions across all directories)來計算它們。

嘗試使用os.path.getsize()然後使用sum()來添加它們,但我要麼得到零或錯誤。

我錯過了什麼?

我複製的代碼是這樣的:

import os 
import collections 
extensions = collections.defaultdict(int) 

place = input('Type the directory path: ') 

for path, dirs, files in os.walk(place): 
    for filename in files: 
     extensions[os.path.splitext(filename)[1].lower()] += 1 

for key,value in extensions.items(): 
    print ('Extension: ', key, ' ', value, ' items') 
+5

向我們展示一些代碼,請。 –

+0

已編輯!我試圖寫這樣的東西:os.path.splitext(文件名)[1] .lower()但它不會工作,我看到我錯過了一些其他用戶顯示的東西。 – pythonintraining

回答

2

你試試這個?

import os 
import collections 
extensions = collections.defaultdict(int) 
size = collections.defaultdict(int) 

for path, dirs, files in os.walk('/'): 
    for filename in files: 
     extensions[os.path.splitext(filename)[1].lower()] += 1 
     size[os.path.splitext(filename)[1].lower()] += os.path.getsize(path+os.sep+filename) 

for key,value in extensions.items(): 
    print 'Extension: ', key, ' ', value, ' items' 

for key,value in size.items(): 
    print 'Extension: ', key, ' ', value, ' size' 

這是基於你的鏈接

+0

啊,我明白了。那麼什麼是.sep +文件名部分?我從來沒有想到這一點! – pythonintraining

+0

謝謝,這個答案與我正在編寫的代碼最接近,但我仍然遇到與徐鼎給出的答案一樣的錯誤。 – pythonintraining

1

剛剛更換的基準一行代碼:

​​
+0

這工作在一個較小的文件夾,但是當我嘗試它C:/用戶/我它給了我一個FileNotFoundError一個文件,看起來像這樣:services.apps.microsoft.com/browse.6.2....dat - 我會寫一個異常處理來忽略這樣的事情,但是爲什麼它在之前工作,而不是在添加代碼後讓我感到困惑。 – pythonintraining

+0

你能給出文件的完整路徑嗎?這似乎是一個角落案例。 –

+0

文件「C:\ Python33 \ lib \ genericpath.py」,第49行,在getsize中 返回os.stat(filename).st_size FileNotFoundError:[WinError 3]系統找不到指定的路徑:'C:/ Users/Joh \\ AppData \\ Local \\ Packages \\ WinStore_cw5n1h2txyewy \\ AC \\ Microsoft \\ Windows Store \\ Cache \\ 0 \\ 0-Namespace-https∺∯∯services.apps.microsoft.com∯browse∯ 6.2.9200-1∯615∯en-US∯c∯US∯Namespace∯pc∯00000000-0000-0000-0000-000000000000∯00000000-0000-0000-0000-000000000000.dat' – pythonintraining

相關問題