[英]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)
ETA : os.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
對象連接在一起。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.