2013-11-28 32 views
1

我有一個包含4個文本文件的文件夾。我想編程一個代碼,我可以檢查文件夾中文件的大小,只打開那些大小相同的代碼。任何人有任何想法?如何用python檢查目錄中文件的大小?

我已經嘗試過這種

import os 


d=os.stat('H:/My Documents/211').st_size 
+0

這是很好的,你已經嘗試過的東西。想必它沒有做你想要的。它做了什麼?你期望它做什麼? – babbageclunk

+0

打印結果d對我顯示零。我想比較文件的大小並打開相同大小的文件 – UserYmY

回答

2

中獲得的所有文件的目錄中,你可以使用os.listdir

>>> import os 
>>> basedir = 'tmp/example' 
>>> names = os.listdir(basedir) 
>>> names 
['a', 'b', 'c'] 

然後,你需要到名稱添加basedir

>>> paths = [os.path.join(basedir, name) for name in names] 
>>> paths 
['tmp/example/a', 'tmp/example/b', 'tmp/example/c'] 

然後你就可以使用os.stat(路徑)把它轉換成對(名稱,大小)的列表。 st_size(我創建的示例文件是空的):

>>> sizes = [(path, os.stat(path).st_size) for path in paths] 
>>> sizes 
[('tmp/example/a', 0), ('tmp/example/b', 0), ('tmp/example/c', 0)] 

然後你可以組合在一起使用collections.defaultdict相同大小的路徑:

>>> import collections 
>>> grouped = collections.defaultdict(list) 
>>> for path, size in sizes: 
...  grouped[size].append(path) 
... 
>>> grouped 
defaultdict(<type 'list'>, {0: ['tmp/example/a', 'tmp/example/b', 'tmp/example/c']}) 

現在你可以按大小得到的所有文件,並打開他們所有(不要忘記之後關閉它們!):

>>> open_files = [open(path) for path in grouped[0]] 
+0

感謝您的幫助。我如何將分組項目放入列表中並將其寫入csv文件,以便日後使用? – UserYmY

+0

這取決於你想要什麼在CSV文件。具有大小,文件名1,文件名2,文件名3的行? – babbageclunk

4

我無法重現你的錯誤。這

import os 
print os.path.getsize('mydata.csv') 
print os.stat('mydata.csv').st_size 

息率

359415 
359415 

我猜您提供的文件名是錯誤的。這將打印的所有文件大小的文件夾

my_dir = r'path/to/subdir/' 

for f in os.listdir(my_dir): 
    path = os.path.join(my_dir, f) 
    if os.path.isfile(path): 
     print os.path.getsize(path) 
+0

謝謝第二個人爲我工作。你有什麼想法,我怎麼可以編碼,以便打開大小相同的文件? – UserYmY

相關問題