2016-07-31 39 views
0

下面是我嘗試做的: 我想獲取C驅動器中所有重量超過35 MB的文件的列表。從我的C驅動器獲取所有文件 - Python

這裏是我的代碼:

def getAllFileFromDirectory(directory, temp): 
    files = os.listdir(directory) 
    for file in files: 
     if (os.path.isdir(file)): 
      getAllFileFromDirectory(file, temp) 
     elif (os.path.isfile(file) and os.path.getsize(file) > 35000000): 
      temp.write(os.path.abspath(file)) 

def getFilesOutOfTheLimit(): 
    basePath = "C:/" 
    tempFile = open('temp.txt', 'w') 
    getAllFileFromDirectory(basePath, tempFile) 
    tempFile.close() 
    print("Get all files ... Done !") 

出於某種原因,解釋不會在if塊中去「getAllFileFromDirectory」。

有人能告訴我我做錯了什麼,爲什麼(學習是我的目標)。如何解決它?

非常感謝您的意見。

+0

我試着在本地運行該代碼(在UNIX系統上,所以用'/'而不是'C:/'),它運行得很完美,它恰巧發生的情況是沒有一個文件大於35 MB在那個目錄中。你確定你有超過35MB的文件,在'C:/'裏面?您的代碼只會直接在'C:/'文件夾內分析文件,而不是遞歸地遍歷它以查看驅動器中的所有文件。 –

+0

@DavidGomes:你確定最後的陳述嗎?根據該函數,它應該爲文件夾遞歸調用自身。 – usr2564301

+1

是的,我錯了。你應該執行'os.path.isdir(directory + file)',因爲'os.path.isdir'只能知道某個目錄是否是一個目錄,如果你給它的完整路徑。 –

回答

1

我修復了你的代碼。你的問題是,os.path.isdir只能知道如果某個目錄是一個目錄,如果它收到它的完整路徑。所以,我將代碼更改爲以下代碼並且工作正常。 os.path.getsizeos.path.isfile也是一樣的。

import os 

def getAllFileFromDirectory(directory, temp): 
    files = os.listdir(directory) 

    for file in files: 
     if (os.path.isdir(directory + file)): 
      if file[0] == '.': continue # i added this because i'm on a UNIX system 

      print(directory + file) 
      getAllFileFromDirectory(directory + file, temp) 
     elif (os.path.isfile(directory + file) and os.path.getsize(directory + file) > 35000000): 
      temp.write(os.path.abspath(file)) 

def getFilesOutOfTheLimit(): 
    basePath = "/" 
    tempFile = open('temp.txt', 'w') 

    getAllFileFromDirectory(basePath, tempFile) 
    tempFile.close() 
    print("Get all files ... Done !") 

getFilesOutOfTheLimit() 
+2

你應該使用'os.path.join(目錄,文件)'來獲得最大的可靠性。當然,OP也應該首先使用'os.walk'。 –

+1

使用'os.walk'可以在3.5+以上執行,而使用'os.scandir'而不是'os.listdir'。對於Windows,它還需要使用Unicode字符串和驅動器C上的基本路徑:應該是'u'\\\\\\\\ C:\\「'。這允許路徑長度達到約32,760個字符,而默認限制爲260個字符。 – eryksun

+0

是否可以看看os.walk方式的示例? – programminator

相關問題