Python 如何使此文件功能非递归?
这是一个函数,它列出了当前文件夹中的所有文件以及递归的子文件夹,我不能非递归地编写它 我尝试使用嵌套格式的while和for循环,但无法使其工作Python 如何使此文件功能非递归?,python,file,recursion,directory,operating-system,Python,File,Recursion,Directory,Operating System,这是一个函数,它列出了当前文件夹中的所有文件以及递归的子文件夹,我不能非递归地编写它 我尝试使用嵌套格式的while和for循环,但无法使其工作 def recur_files(start_dir): files = [] original_path = os.getcwd() os.chdir(start_dir) items = os.listdir() for item in items: if "." in item:
def recur_files(start_dir):
files = []
original_path = os.getcwd()
os.chdir(start_dir)
items = os.listdir()
for item in items:
if "." in item:
files.append(os.path.abspath(item))
else:
files.extend(recur_files(os.path.abspath(item)))
os.chdir(original_path)
return files
示例:
from os import walk
files = []
for _, _, filenames in walk(your_path):
files.extend(filenames)
print("Files: {}".format(files))
您可以递归地获取路径中的所有文件 如果希望以深度优先搜索方式列出文件,而不使用程序堆栈(也称为递归),则始终可以创建自己的堆栈(只是Python中的列表),并编写一个简单的DFS算法,如下所示
import os
def recur_files():
original_path = os.getcwd()
stack = os.listdir()
results = []
for item in stack:
os.path.join(original_path, item)
while stack:
elem = stack.pop(0)
if os.path.isdir(elem):
results.append(elem)
for item in os.listdir(elem):
stack = [os.path.join(elem, item)] + stack
else:
results.append(elem)
return results
您可以使用os.walk()
获取文件夹和子文件夹中的所有文件
但若你们想创建自己的函数,那个么你们需要dirs的列表。循环应该从此列表中获取dirname,您应该将新dir添加到此列表中,而不是使用newstart\u dir运行函数
import os
def recur_files(start_dir):
files = []
dirs = [start_dir]
for dirname in dirs:
for item in os.listdir(dirname):
fullpath = os.path.join(dirname, item)
if os.path.isdir(fullpath): #and fullpath not in ('.', '..'):
dirs.append(fullpath)
else:
files.append(fullpath)
return files, dirs
recur_files('.')
使用os.walk()
获取文件夹和子文件夹中的所有文件。若要使其无递归(且无os.walk),您必须使用目录列表,并使用从该列表获取目录名的循环。若它找到了子文件夹,那个么它会将dirname添加到这个列表中,下次循环应该会从列表中获取它。非常感谢。它满足了我的目的。非常感谢,非常感谢!这教会了我如何处理递归函数。非常感谢。非常有用。我将使用os.walk()。我还学会了将递归函数转换为非递归函数。