2012-05-12 27 views
1

我想遍歷目錄和子目錄,並檢查每個文件的文件大小。如果它匹配定義的文件大小,它將被刪除。遍歷目錄並檢查文件的大小

我知道,我必須使用os.walk,但我不太確定,以哪種方式。

我使用的目錄列表中的代碼是:

import os 
path = "C:\\Python27" 
i=0 
for (path,dirs,files) in os.walk(path): 
    print files 
    i=i+1 
    if i>10: 
     break 
+0

可能重複(http://stackoverflow.com/questions/120656/directory-listing-in-python) –

+0

你真的應該嘗試的東西在尋求幫助之前 – cobie

+0

我可以列出所有的目錄和文件,但我想檢查每個目錄中的特定文件大小。 –

回答

2

試試這個:

import os 

for root, dirs, files in os.walk('/path/to/dir', topdown=False): 
    for name in files: 
     f = os.path.join(root, name) 
     if os.path.getsize(f) == filesize: 
      os.remove(f) 
[Python中的目錄列表]的
+0

非常感謝。有效! 如果我還想檢查與目錄名稱相同的目錄中的文件名,該怎麼辦?假設檢查目錄mydir中名爲mydir.txt的文件。 –

+0

@RobertShane它都是一樣的,添加另一個條件,如'如果root.endswith(name [:name.rindex('。')]):' –

1

這應該工作:

from __future__ import print_function # => For Python 2.5 - 2.7 
import os 

def delete_files_with_size(dirname, size): 
    for root, _, files in os.walk(dirname): 
     for filename in files: 
      filepath = os.path.join(root, filename) 
      if os.path.getsize(filepath) == size: 
       print('removing {0}'.format(filepath)) 
       os.remove(filepath) 

就像你說的,os.walk是去這樣的事情的方式。 os.walk返回一個包含根路徑,目錄列表和文件列表的元組。由於我們對目錄不感興趣,因此在解壓縮返回值時,我們使用傳統的_變量名稱。

由於文件名本身不包含路徑,因此您可以使用os.path.joinrootfilenameos.path.getsize將返回文件的大小,並且os.remove將刪除該文件,如果它與大小相匹配。