Pandas写入CSV时自定义原文件名后缀输出路径报错排查
问题根源分析
你遇到的FileNotFoundError是因为传入的filename参数不是单纯的文件名,而是包含了完整路径的字符串,导致os.path.join拼接时出现了重复的目录。
举个例子:如果你运行脚本时输入的是python your_script.py /Users/mdong/dataScience/movie_representation/fuzzy_match_dir/xaa.csv,那么sys.argv[1]拿到的filename就是这个完整路径。当你执行os.path.join(path, 'match_' + filename)时,由于filename是绝对路径,os.path.join会直接忽略前面的path参数,转而使用filename的路径部分,再加上你硬加的match_,最终生成的路径就变成了/Users/mdong/dataScience/movie_representation/fuzzy_match_dir/fuzzy_match_dir/xaa.csv——这就是错误的核心原因。
解决方案
要解决这个问题,你需要先从传入的filename中提取纯文件名部分,再和目标路径拼接。具体步骤如下:
- 使用
os.path.basename(filename)提取不带路径的纯文件名(比如从完整路径中取出xaa.csv) - 构建带
match_前缀的新文件名 - 用
os.path.join拼接目标路径和新文件名
修正后的代码如下:
import sys import os filename = sys.argv[1] # 你的其他代码:读取文件、匹配列等逻辑 path = r'/Users/mdong/dataScience/movie_representation/fuzzy_match_dir/' # 提取纯文件名,避免路径重复 pure_filename = os.path.basename(filename) # 构建新的文件名(原文件名前加match_) new_filename = f'match_{pure_filename}' # 拼接路径并保存CSV input_file.to_csv(os.path.join(path, new_filename), index=False)
额外优化提示
如果你希望生成的文件名是原文件名_matched.csv(比如xaa_matched.csv,完全符合你最初的需求),可以把新文件名的构建逻辑改成这样,既能保留原文件的扩展名,又能精准修改文件名部分:
# 拆分文件名和扩展名 name, ext = os.path.splitext(pure_filename) # 构建符合要求的新文件名 new_filename = f"{name}_matched{ext}"
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

