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
核心问题
- 环境变量误用:
os.getenv('path')读取的是系统默认的PATH变量(存储可执行文件路径集合),不是你要扫描的目标目录。若未自定义设置同名变量,会返回None,传入os.listdir()直接触发报错。 - 路径拼接不规范:
patha + path + '/'的写法不跨平台(Windows用\、类Unix系统用/),且原路径末尾已有分隔符时会出现重复,导致无效路径。 - 递归结果嵌套:
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
相关产品推荐
相关产品推荐

