我试图递归地遍历目录和子目录,以找到母目录中的所有文件。
这是针对Python 3的。我尝试测试给定的路径是目录还是文件。如果是文件,则将路径追加到列表中;如果是目录,则在其上调用该函数,以便它可以将其中的任何文件添加到列表中,以获得第一个目录中文件的完整路径列表。
import os,csv,json
def find_file(path):
paths = []
if os.path.isdir(path):
cont = os.listdir(path)
for x in cont:
if os.path.isfile(os.path.join(path,x)):
if x.startswith("."):
continue
paths.append(os.path.join(path,x))
if os.path.isdir(os.path.join(path,x)):
find_file(os.path.join(path,x))
else:
paths.append(path)
return(paths)
会发生什么情况,它将返回直接上级目录中的所有文件元素,但是如果上级目录中有目录,则该目录中的所有文件都不会最终出现在列表中。
答案 0 :(得分:0)
当您递归调用find_file
时,必须将其所有结果附加到paths
。
import os,csv,json
def find_file(path):
paths = []
if os.path.isdir(path):
cont = os.listdir(path)
for x in cont:
if os.path.isfile(os.path.join(path,x)):
if x.startswith("."):
continue
paths.append(os.path.join(path,x))
if os.path.isdir(os.path.join(path,x)):
paths += find_file(os.path.join(path,x))
else:
paths.append(path)
return(paths)
另一种方法是传递paths
作为参数。
import os,csv,json
def find_file(path, paths = None):
if paths is None:
paths = []
if os.path.isdir(path):
cont = os.listdir(path)
for x in cont:
if os.path.isfile(os.path.join(path,x)):
if x.startswith("."):
continue
paths.append(os.path.join(path,x))
if os.path.isdir(os.path.join(path,x)):
find_file(os.path.join(path,x), paths)
else:
paths.append(path)
return(paths)