此功能列出了当前文件夹和子文件夹中的所有文件,该文件是递归的,我无法以非递归的方式编写
我尝试使用嵌套格式的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:
files.append(os.path.abspath(item))
else:
files.extend(recur_files(os.path.abspath(item)))
os.chdir(original_path)
return files
答案 0 :(得分:1)
示例:
from os import walk
files = []
for _, _, filenames in walk(your_path):
files.extend(filenames)
print("Files: {}".format(files))
您可以递归获取路径中的所有文件。
答案 1 :(得分:0)
如果要以深度优先搜索的方式列出文件而不使用程序堆栈(也称为递归),则始终可以创建自己的堆栈(只是Python中的列表),并编写一个简单的DFS算法,如下所示。
import org.apache.spark.sql.functions._
dataFrame
.withColumn("Date", to_date(from_unixtime(col("pro_rtc"))))
.withColumn("Monday", expr("date_sub(Date, dayofweek(Date) - 2)"))
答案 2 :(得分:0)
您可以使用os.walk()
来获取文件夹和子文件夹中的所有文件。
但是,如果要创建自己的函数,则需要目录列表。循环应该从该列表中获取目录名,并且应该向该列表中添加新目录,而不是使用新的start_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('.')