是否有内置函数可以查找特定目录下的所有文件,包括子目录下的文件? 我试过这段代码,但没有用......可能逻辑本身就错了......
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
答案 0 :(得分:12)
没有内置函数,但使用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))
答案 1 :(得分:3)
我强烈推荐这个由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
运算符轻松地将两个或多个/
对象连接在一起。
希望这有帮助!
答案 2 :(得分:2)