2017-05-24 103 views
0

我想遞歸列出名爲Oracle的子目錄中的所有文件名(但不列出其他子目錄中的文件)。遞歸列表匹配模式的目錄中的文件

我有以下代碼:

for root, dirs, files in os.walk(r"Y:\Data\MXD_DC\DataSourceChange", topdown=True): 
    for name in dirs: 
     if fnmatch.fnmatch(name, 'Oracle'): 
      for filename in files: 
       fullpath = os.path.join(root, filename) 
       print "FullPath is: " + fullpath 

我只能得到它列出所有子目錄的所有文件名。它甚至不會進入名爲Oracle的子目錄。

回答

0

目前,當你發現一個名爲Oracle目錄,您列出了層級中處於相同級別的文件,而不是列出包含的文件在Oracle文件夾中,因爲由os.walk返回的元組包含相同的目錄和文件l埃維爾。

你有2種方法來列出預期的文件:

  • 只使用從walk dirnames中,並使用listdir一旦你找到一個Oracle文件夾

    for root, dirs, files in os.walk(r"Y:\Data\MXD_DC\DataSourceChange", topdown=True): 
    for name in dirs: 
        if name == 'Oracle': 
         path = os.path.join(root, name) 
         for filename in os.listdir(path): 
          fullpath = os.path.join(path, filename) 
          print "FullPath is: " + fullpath 
    
  • 忽略dirnames中,使用最後一個組成部分從根目錄並測試它是否爲Oracle:

    for root, dirs, files in os.walk(r"Y:\Data\MXD_DC\DataSourceChange", topdown=True): 
        if os.path.basename(root) == 'Oracle': 
         for filename in files: 
          fullpath = os.path.join(root, filename) 
          print "FullPath is: " + fullpath 
    
+0

這很不錯,稍作修改。 fullpath = os.path.join(路徑,文件名) –

+0

@NeerajSingh:Oups!編輯... –

0

如果要列出一個特定目錄中的文件,你可以使用

import os 
os.listdir("Oracle") 

從腳本打印目錄使用

import os 
print "%s" %os.listdir("Oracle") 
+0

那麼我必須使用該特定目錄中的文件。而名爲Oracle的目錄可能不一定在根目錄。它可能在一個子目錄中。 –