簡體   English   中英

在Python中,如何查找目錄下的所有文件,包括子目錄中的文件?

[英]In Python, how to find all the files under a directory, including the files in subdirectories?

是否有內置函數來查找特定目錄下的所有文件,包括子目錄下的文件? 我試過這段代碼,但沒有工作......可能邏輯本身就錯了......

def fun(mydir):
    lis=glob.glob(mydir)
    length=len(lis)
    l,i=0,0
    if len(lis):
        while(l+i<length):
            if os.path.isfile(lis[i]):
                final.append(lis[i])
                lis.pop(i)
                l=l+1
                i=i+1
            else:
                i=i+1
            print final
        fun(lis)
    else:
        print final

沒有內置函數,但使用os.walk構建它是微不足道的:

import os
def recursive_file_gen(mydir):
    for root, dirs, files in os.walk(mydir):
        for file in files:
            yield os.path.join(root, file)

ETAos.walk函數遞歸地os.walk目錄樹; recursive_file_gen函數是一個生成器(使用yield關鍵字生成下一個文件)。 要獲得結果列表:

list(recursive_file_gen(mydir))

我強烈推薦這個由Jason Orendorff編寫的路徑模塊:

http://pypi.python.org/pypi/path.py/2.2

不幸的是,他的網站現在已經關閉,但您仍然可以從上面的鏈接下載(或者通過easy_install ,如果您願意的話)。

使用此路徑模塊,您可以對路徑執行各種操作,包括您請求的步行文件。 這是一個例子:

from path import path

my_path = path('.')

for file in my_path.walkfiles():
    print file

for file in my_path.walkfiles('*.pdf'):
    print file

對於許多其他與路徑有關的事項,還有便利功能:

In [1]: from path import path

In [2]: my_dir = path('my_dir')

In [3]: my_file = path('readme.txt')

In [5]: print my_dir / my_file
my_dir/readme.txt

In [6]: joined_path = my_dir / my_file

In [7]: print joined_path
my_dir/readme.txt

In [8]: print joined_path.parent
my_dir

In [9]: print joined_path.name
readme.txt

In [10]: print joined_path.namebase
readme

In [11]: print joined_path.ext
.txt

In [12]: joined_path.copy('some_output_path.txt')

In [13]: print path('some_output_path.txt').isfile()
True

In [14]: print path('some_output_path.txt').isdir()
False

還有更多的操作可以完成,但這些是我經常使用的一些操作。 請注意, path類繼承自string ,因此可以在使用string任何地方使用它。 另外,請注意,可以使用重寫/運算符輕松地將兩個或多個path對象連接在一起。

希望這可以幫助!

os.walk()就是你所需要的。

但是為了增加性能,請嘗試包scandir 它也是Python 3.5中標准庫的一部分,在PEP 471中有描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM