使用Python Pandas合并目录文件时触发FileNotFoundError求助
问题原因
报错里的路径./Sales_DataSales_April_2019.csv暴露了核心问题:路径拼接时缺少目录分隔符。你直接把./Sales_Data和文件名字符串拼接,导致目录名和文件名连在了一起,系统无法定位到正确的文件位置。
修正方案
方案1:使用os.path.join(跨平台兼容)
os.path.join会根据操作系统自动添加正确的目录分隔符,避免手动拼接出错:
import os import pandas as pd files = [file for file in os.listdir('./Sales_Data')] all_months_data = pd.DataFrame() for file in files: # 自动拼接正确路径 full_path = os.path.join('./Sales_Data', file) df = pd.read_csv(full_path) all_months_data = pd.concat([all_months_data, df]) all_months_data.to_csv("all_data.csv", index=False)
方案2:使用pathlib(更现代的路径处理方式)
Python 3.4+推荐用pathlib,语法更简洁直观,还能直接筛选CSV文件:
from pathlib import Path import pandas as pd # 定义数据目录 data_dir = Path('./Sales_Data') # 只获取目录下的所有CSV文件 csv_files = list(data_dir.glob('*.csv')) # 一次性合并所有CSV,效率更高 all_months_data = pd.concat([pd.read_csv(file) for file in csv_files]) all_months_data.to_csv("all_data.csv", index=False)
额外注意事项
- 确认
./Sales_Data目录确实存在于当前脚本的运行路径下,可通过print(os.getcwd())查看当前工作目录 - 筛选CSV文件:如果
Sales_Data目录里有非CSV文件,方案2的glob('*.csv')能自动过滤,方案1可以加判断:files = [file for file in os.listdir('./Sales_Data') if file.endswith('.csv')] - 效率优化:循环中逐次
concat会重复创建DataFrame,用列表推导式先读取所有文件再一次性concat,处理大量文件时速度更快
内容的提问来源于stack exchange,提问作者rgd90
相关产品推荐
相关产品推荐

