You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python生成文件列表报错求助:代码问题排查

问题分析与修复

原始代码

main.py

import os
from functions import *


if __name__ == "__main__":
    path = os.getenv('path')
    print(readFiles(path))

functions.py

import os

def readFiles(patha):
    res = []

    # Iterate directory
    currentpath = os.listdir(patha)
    
    for path in currentpath:
        # check if current path is a file
        if os.path.isfile(os.path.join(patha, path)):
            res.append(path)
        else:
            pathf = patha + path + '/'
            res.append(readFiles(pathf))


    return res

核心问题

  1. 环境变量误用:os.getenv('path')读取的是系统默认的PATH变量(存储可执行文件路径集合),不是你要扫描的目标目录。若未自定义设置同名变量,会返回None,传入os.listdir()直接触发报错。
  2. 路径拼接不规范:patha + path + '/'的写法不跨平台(Windows用\、类Unix系统用/),且原路径末尾已有分隔符时会出现重复,导致无效路径。
  3. 递归结果嵌套:res.append(readFiles(pathf))会把递归返回的列表作为单个元素加入结果,最终得到多层嵌套的列表,不符合“扁平文件列表”的需求。

修复后的代码

main.py

import os
from functions import readFiles

if __name__ == "__main__":
    # 直接指定目标目录,或设置自定义环境变量如TARGET_PATH
    path = os.getenv('TARGET_PATH') or '/your/target/directory'
    print(readFiles(path))

functions.py

import os

def readFiles(patha):
    res = []
    for entry in os.listdir(patha):
        full_path = os.path.join(patha, entry)
        if os.path.isfile(full_path):
            res.append(full_path)  # 要文件名就改成res.append(entry)
        elif os.path.isdir(full_path):
            # 用extend展开递归结果,避免嵌套
            res.extend(readFiles(full_path))
    return res

额外提示

  • 若只需文件名而非完整路径,将res.append(full_path)替换为res.append(entry)即可。
  • 优先直接在代码中指定目标路径,或使用自定义环境变量名(避免与系统PATH冲突)。

内容的提问来源于stack exchange,提问作者dpmind123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:45:11