2015-10-19 192 views
0

我有一個包含文件夾和子文件夾的目錄。在每個路徑的末尾都有文件。我想創建一個包含所有文件路徑的txt文件,但不包括文件夾的路徑。在python中,如何獲取目錄中所有文件的路徑,包括子目錄中的文件,但不包括子目錄的路徑

我想這個建議從Getting a list of all subdirectories in the current directory,我的代碼如下所示:

import os 

myDir = '/path/somewhere' 

print [x[0] for x in os.walk(myDir)] 

,它給所有元素(文件和文件夾)的路徑,但我只想要路徑的文件。任何想法呢?

+0

你可以取根目錄並將其與'os.walk''中的文件名連接起來。 – Riyaz

回答

1

os.walk(path)返回三元組的父文件夾,子文件和目錄。

所以你可以這樣做:

for dir, subdir, files in os.walk(path): 
    for file in files: 
     print os.path.join(dir, file) 
+0

這項工作,謝謝。第一行代碼應該是 for dir,subdir,** ** os.walk(path): – mcrash

+0

@mcrash感謝您的通知,輸入錯誤,現在更新 – Hackaholic

0

os.walk方法在每次迭代中爲您提供dirs,subdirs和文件,因此當您通過os.walk循環時,您將不得不迭代文件並將每個文件與「dir」組合。

爲了執行這種組合,你想要做的是在目錄和文件之間做一個os.path.join

下面是一個簡單的例子,說明如何用os.walk穿越工程

from os import walk 
from os.path import join 

# specify in your loop in order dir, subdirectory, file for each level 
for dir, subdir, files in walk('path'): 
    # iterate over each file 
    for file in files: 
     # join will put together the directory and the file 
     print(join(dir, file)) 
0

如果你只是想的路徑,然後過濾器添加到列表理解如下:

import os 

myDir = '/path/somewhere' 
print [dirpath for dirpath, dirnames, filenames in os.walk(myDir) if filenames] 

這則只能添加路徑用於包含文件的文件夾。

+0

您只打印路徑非空的目錄,Op也需要所有文件的路徑 – Hackaholic

0
def get_paths(path, depth=None): 
    for name in os.listdir(path): 
     full_path = os.path.join(path, name) 

     if os.path.isfile(full_path): 
      yield full_path 

     else: 
      d = depth - 1 if depth is not None else None 

      if d is None or d >= 0: 
       for sub_path in get_paths(full_path): 
        yield sub_path 
相關問題