首页 > 解决方案 > 返回所有parts.txt文件的路径列表

问题描述

使用 os 模块的 walk 生成器编写一个list_files_walk返回所有文件路径列表的函数。parts.txt该函数不接受输入参数。

def list_filess_walk():
    for dirpath, dirnames, filenames in os.walk("CarItems"):
        if 'parts.txt' in dirpath:
            list_files.append(filenames)
            print(list_files)
    return list_files

目前,list_files还是空的。输出应该与此类似:

CarItems/Chevrolet/Chevelle/2011/parts.txt
CarItems/Chevrolet/Chevelle/1982/parts.txt

我怎样才能产生这个输出?

标签: python-3.xlistfiledirectory

解决方案


您在这里几乎拥有它-我要做的唯一调整是:

  • 确保list_files在函数的本地范围内避免副作用
  • 使用参数,使函数可以在任意路径上工作。
  • 返回一个带有yield允许延迟获取下一个文件的关键字的生成器。
  • 'parts.txt' in dirpath如果文件名恰好是路径中其他地方的子字符串,则可能容易出错。我会使用endswith或迭代元组中的第二个项目,os.walk它是当前目录中所有项目的列表,例如'parts.txt' in dirnames.
  • 按照与上述相同的思路,您可能希望确保您的目标是一个带有os.path.isfile.

这是一个例子:

import os

def find_files_rec(path, fname):
    for dirpath, dirnames, files in os.walk(path):
        if fname in files:
            yield f"{dirpath}/{fname}"

if __name__ == "__main__":
    print(list(find_files_rec(".", "parts.txt")))

推荐阅读