2017-02-18 85 views
0

我正在學習python,並試用了os.walk()函數。我在Windows平臺上使用python 3.4.4(64位)。根據我的理解python應該逐行執行我的語句。爲什麼python沒有按照我的打印語句調用序列

在這段代碼中我已經重複過directory.The目錄結構

The directory structure is as shown

我需要打印第一,然後寫的目錄names.The代碼中的所有文件是:

import os 
dir_path = r"D:\\python_os_walk_check" 

for root,dirs,files in os.walk(dir_path): 
    for file_name in files: 
     print(file_name) 
    for dir_name in dirs: 
     print(dir_name) 

打印的輸出中是:

first_folder 
second_folder 
test1.txt 
test2.txt 

根據我輸出應該是:

test1.txt 
test2.txt 
first_folder 
second_folder 

我在哪裏出錯了?

回答

3

您首先得到dir_path的內容,它只是兩個目錄。這些文件位於目錄中,因此稍後您可以在循環的第二和第三次迭代中找到它們。添加一個print(root)作爲循環內的第一件事,你會更清楚地看到發生了什麼。

+0

好吧,我得到了它。我假設一個總迭代文件的列表將被返回文件變量。感謝您的答案。 – Omkar

1

您可以存儲文件/目錄的名稱,並在for循環完成後將其打印出來。

import os 
dir_path = "D:\\python_os_walk_check" 

file_list = [] 
dir_list = [] 

for root,dirs,files in os.walk(dir_path): 
    for file_name in files: 
     file_list.append(file_name) 
    for dir_name in dirs: 
     dir_list.append(dir_name) 

for x in file_list: 
    print(x) 

for i in dir_list: 
    print(i) 
+0

其實打印不是我的最終目的,我想了解我的理解 – Omkar

0

你可能會有點更像你似乎什麼,如果你使用自上而下的參數os.walk像這樣想:

import os 
dir_path = r"C:\Python34\Tools\pynche" 

for root,dirs,files in os.walk(dir_path, topdown=False): 
    for file_name in files: 
     print(file_name) 
    for dir_name in dirs: 
     print(dir_name) 

不幸的是,我認爲這僅僅是兩個級別的文件夾好。

作爲一個更新的解決方案,您可以考慮在pathlib模塊Python 3 doc 11.1中提供的功能。

+0

以上的代碼有什麼問題哦,是的,這可能是另一種方式獲得相同的輸出爲2級文件夾所述。 – Omkar

+0

而且,我知道。 –

相關問題