在Python中,如何查找目录下的所有文件,包括子目录中的文件?
问题描述:
是否有内置的函数来查找特定目录下的所有文件,包括子目录下的文件? 我曾尝试这个代码,但没有工作...可能是本身就是错误的逻辑...在Python中,如何查找目录下的所有文件,包括子目录中的文件?
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
功能递归地走目录树; 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
对象连接在一起。
希望这会有所帮助!
谢谢SilentGhost ... :) 请问您能解释一下代码吗... – pythBegin 2010-05-19 12:23:48
@pythbegin:补充说明,请问是否有具体问题不明确。 – SilentGhost 2010-05-19 13:16:24
好的...但我不明白产量的一部分... – pythBegin 2010-05-19 13:22:01