我正在编写一个递归遍历文件系统的函数,并返回所有扩展名为 .txt 的文件的列表。
pass_test_func 参数只是一个可以运行和检查的函数(即文件是否大于 100 字节等) - nothing 函数(设置为它的默认),只是返回它的参数。
我的实现:
def visit(dname, pass_test_func=nothing):
directory = os.listdir(dname)
byte_list = []
for file in directory:
file_dir = os.path.join(dname, file)
if os.path.isfile(file_dir) and file_dir.lower().endswith('.txt'):
size = os.path.getsize(file_dir)
if pass_test_func(size):
byte_list.append(str(size) + ' ' + file_dir)
elif os.path.isdir(file_dir):
visit(file_dir, pass_test_func)
return byte_list
我的问题是,当我在以下行中递归调用 visit 时
elif os.path.isdir(file_dir):
visit(file_dir, pass_test_func)
byte_list 再次清空。我明白为什么会这样,但不知道如何解决。该列表必须在 visit 的定义中定义,所以每当我使用递归时,它总是会被重置,无论对不对?也许其他一些数据结构更适合,比如元组或字典?
请您参考如下方法:
您的函数返回 byte_list,因此在进行递归调用时只需附加返回值,而不是像您目前所做的那样将其丢弃:
elif os.path.isdir(file_dir):
byte_list += visit(file_dir, pass_test_func)
