【问题标题】:Return a list of the paths of all the parts.txt files返回所有parts.txt文件的路径列表
【发布时间】:2020-03-19 16:28:43
【问题描述】:

使用 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.x list file directory


【解决方案1】:

你几乎拥有它——我要做的唯一调整是:

  • 确保list_files 的作用域在函数的本地范围内,以避免side effects
  • 使用参数使函数可以在任意路径上工作。
  • 返回一个带有 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")))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 2021-12-21
    • 2021-11-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多