2013-12-21 64 views
-1

我試圖使用os.walk()打印出目錄及其子目錄中的所有文件。這是我寫的:os.walk的初始目錄()

def usewalk(): 
    for root, dirname, filename in os.walk("/"): 
     print filename 

我不知道我應該用什麼作爲os.walk()的目錄。也就是說,我不確定我應該在括號中包括什麼。我想如果我使用「/」,它將從文件所在的目錄開始,但它打印出不在其中的文件,例如「['.dbfseventsd','.DS_Store','.file' ,'.hotfiles.btree','mach_kernel']「。在我看來,它是從默認的Python目錄開始的?

回答

3

不,/是您的文件系統的。使用.當前目錄下啓動:

def usewalk(): 
    for root, dirname, filenames in os.walk("."): 
     print filename 

打印出來root也看到了目錄名被掛繞;下面的代碼片段打印全路徑名:

def usewalk(): 
    for root, dirname, filenames in os.walk("."): 
     for filename in filenames: 
      print os.path.join(root, filename) 
0

/是根目錄。您可能會將其與./混淆,這是引用當前目錄的常用方法。

+0

是。和相同的? – user1691278

+0

@ user1691278:是的,就像使用'/ path/to/directory'或'/ path/to/directory /'尋址另一個目錄一樣。 –

1

正如我之前所說 - /目錄是您的系統根目錄。

對於一個很好的起點,你有幾種選擇:

  1. 開始從你當前的工作目錄:os.walk(os.getcwd())
  2. 開始從那裏你的Python文件是:os.walk(os.path.dirname(__file__))
  3. 開始從用戶的主目錄:os.walk(os.getenv('HOME'))
  4. 獲取目錄作爲您的程序/函數的參數。

我不會建議從.開始,因爲它可能無法移植到Windows(既不會把getenv選項,但它是一個基於Unix程序一個不錯的選擇)。使用os.getcwd()代替便攜性和正確性。

我會推薦#4 - 因爲它會產生最有用和最可預測的代碼。