2016-05-29 34 views
0

我寫過這個程序,它不使用os.walk(),glob或fnmatch,這是故意的。它查看目錄以及該指定目錄中的所有子目錄和文件,並返回該目錄中有多少個文件+文件夾。使用遞歸代碼,我想返回一組2個值(總文件,文件夾)

import os 

def fcount(path): 
    count = 0 

    '''Folders''' 
    for f in os.listdir(path): 
     file = os.path.join(path, f) 
     if os.path.isdir(file): 
      file_count = fcount(file) 
      count += file_count + 1 

    '''Files''' 
    for f in os.listdir(path): 
     if os.path.isfile(os.path.join(path, f)): 
      count += 1 
    return count 

path = 'F:\\' 
print(fcount(path)) 

一個例子輸出我是目錄F使我700共計700個文件和文件夾。

我現在想要做的是使用此代碼,當然有一些修改,調用fcount('F:\\')並返回一組(total files, folders)

我想要的輸出示例是:(700, 50)700files + folders50只是folders

我不知道如何做到這一點。

+1

是的,使用元組。有什麼問題? –

+0

@KarolyHorvath不知道如何在這組代碼中實現一個元組。 – adhamncheese

回答

2

保持兩項罪名,並返回它們作爲一個元組:

total_count = dir_count = 0, 0 
# .. increment either as needed 
return total_count, dir_count 

你只需要循環os.listdir()一次;你已經發現,如果事情是一個文件或目錄所以只是在上一個循環區分:

def fcount(path): 
    total_count = dir_count = 0 

    for f in os.listdir(path): 
     file = os.path.join(path, f) 
     if os.path.isdir(file): 
      recursive_total_count, recursive_dir_count = fcount(file) 
      # count this directory in the total and the directory count too 
      total_count += 1 + recursive_total_count 
      dir_count += 1 + recursive_dir_count 
     elif if os.path.isfile(file): 
      total_count += 1 
    return file_count, total_count 

path = 'F:\\' 
print(fcount(path)) 

最後print()然後打印與計數的元組;你總是可以將它們分開:

total_count, dir_count = fcount(path) 
print('Total:', total_count) 
print('Directories:', dir_count) 
+0

我現在看到它。我將計數添加到每個循環中,並且因爲我正在這樣做,所以不可能爲每個循環獲得單獨的答案。現在,我需要做的就是明白這一點。謝謝! – adhamncheese