合并多份实验参与者CSV文件:解决FileNotFoundError问题
解决CSV合并时的FileNotFoundError问题
问题根源
你用listdir("results")拿到的只是文件夹里的纯文件名,不是完整路径。当你直接open(file)的时候,Python会在当前运行脚本的目录里找这个文件,而不是去results文件夹里找,自然就找不到了。
修正后的代码
推荐用os.path.join()拼接路径,它能自动适配不同系统的路径分隔符,比手动拼字符串靠谱。另外处理CSV文件最好用标准库的csv模块,能避免手动读行带来的格式问题(比如单元格里有逗号或换行的情况),同时用with语句自动管理文件关闭,省得忘关泄漏资源:
import os import csv folder_path = "results" output_file = "merged_results.csv" # 只筛选出.csv结尾的文件,避免误处理其他类型文件 csv_files = [f for f in os.listdir(folder_path) if f.lower().endswith(".csv")] with open(output_file, "w", newline="", encoding="utf-8") as out_f: writer = csv.writer(out_f) is_first_file = True for filename in csv_files: # 拼接完整路径,这是解决找不到文件的核心 full_path = os.path.join(folder_path, filename) with open(full_path, "r", encoding="utf-8") as in_f: reader = csv.reader(in_f) if is_first_file: # 第一个文件保留表头 writer.writerows(reader) is_first_file = False else: # 后续文件跳过表头,避免重复 next(reader) writer.writerows(reader)
几个关键细节
- 必须用
os.path.join()生成完整路径,确保Python能定位到results文件夹里的目标文件。 - 用
csv模块读写比直接读行更安全,能处理CSV的特殊格式场景。 with语句会在代码块结束后自动关闭文件,不用手动调用close(),减少bug。- 加了表头判断,避免合并后的文件里重复出现表头。如果你的CSV没有表头,直接删掉
is_first_file相关逻辑就行。
内容的提问来源于stack exchange,提问作者amb
相关产品推荐
相关产品推荐

