2016-02-08 40 views
1
import os 

searchFolder = input('Which folder would you like to search?') 

def search(folder): 
    for foldername, subfolders, filenames in os.walk(folder): 
     for filename in filenames: 
      if os.path.getsize(filename) > 1000: 
       print(str(os.path.abspath(filename)) + 'is ' + str(os.path.getsize(filename))) 
      else: 
       continue 

search(searchFolder) 

這項計劃旨在向用戶詢問一個字符串,遍歷該目錄下的文件,並打印每一個項目的絕對路徑和文件大小超過一定尺寸。當我在任何目錄上運行此代碼時,我得到一個FileNotFoundError: [WinError 2]。我使用轉義反斜槓輸入目錄。我認爲這是我的一個基本錯誤,這是任何人都需要的信息,但讓我知道是否還有其他任何有用的信息。謝謝!初學者的Python 3 - os.path中和WinError2

+0

您需要提供目錄的絕對路徑,另一種方式如果您的目錄與您的py腳本相同 – tinySandy

+0

對不起,我希望我能理解您的權利,但此時我正在輸入絕對路徑,即C:\\ Users \\ pep \\ Documents – Pep

回答

1

filename for loop你只有通過文件名,但不是完整的行路徑。如果你寫:

if os.path.getsize(foldername+"/"+filename) > 1000: 

這適用於Linux。對於Windows,您需要使用\\\而不是/。所以現在你明白爲什麼它不起作用。添加路徑時應使用完整的文件路徑或相對路徑。在linux

工作代碼:)

import os 

searchFolder = input('Which folder would you like to search? ') 

def search(folder): 
    for foldername, subfolders, filenames in os.walk(folder): 
     for filename in filenames: 
      if os.path.getsize(foldername+"/"+filename) > 1000: 
      print(str(os.path.abspath(filename)) + ' is ' + str(os.path.getsize(foldername+"/"+filename))) 
     else: 
      continue 

search(searchFolder) 
+0

這看起來可行!我認爲Python會知道文件名只是路徑的最後一位。謝謝您的幫助。並感謝大家提供關於合併原始字符串的提示。 – Pep

0

我測試了代碼,它工作正常,我用於測試。 ./

Python的同時接受路徑類型:

path = "C:/" # unix 

path = "C:\\" # windows 

輸入嘗試./,這將搜索目錄的程序是在 所以,你有兩個選擇,relative pathing或絕對路徑。

More on pathing

雖然如所提到的,對於任何事情的程序目錄之外,你需要正確的

if os.path.getsize(filename) > 1000: 

if os.path.getsize(foldername+"/"+filename) > 1000: 
+0

謝謝!我絕對可以使用這個。 – Pep

0

輸入(將返回字符串用戶寫道。你不必逃避反斜槓。所以只需輸入它作爲C:\path\to\my\folder\。當你在你的python源代碼中編寫Windows路徑時,你必須跳過你的反斜槓或使用r「原始字符串」。

您可以使用os.path.isdir()來檢查python是否實際接受路徑,並在找不到路徑時輸出錯誤。

searchFolder = input('Which folder would you like to search?') 
if os.path.isdir(searchFolder): 
    search(searchFolder) 
else: 
    print("the folder %s was not found" % searchFolder) 
+0

我喜歡這個想法。任何想法爲什麼它拋出一個語法錯誤在其他?我無法弄清楚。 else: ^ SyntaxError:無效的語法 – Pep

+0

不知道。通常這是因爲你忘記關閉括號或其他東西。我在我發佈的代碼中看不到任何語法錯誤。 –

+0

謝謝。無法弄清楚,但這只是一個練習,所以我不太在意。謝謝你的幫助!他們說,SO可以帶着noob問題棘手。 – Pep

0

每當你想插入任何路徑,就在路徑之前添加r。這是Python的原始字符串符號。一世。Ë;與r

所以前綴字符串文字以任何特殊的方式反斜槓不處理,如果你想在C:\Users\pep\Documents

添加到一個名爲foo文件的路徑,只要給你的路徑

my_path = r'C:\Users\pep\Documents\foo' 

你現在不需要費力逃避任何反斜槓。