遍历目录为多CSV文件创建独立DataFrame的问题
解决目录及子文件夹CSV文件生成独立DataFrame的问题
看起来你遇到的FileNotFoundError大概率是路径处理不完整导致的——比如你只存了CSV的文件名,而没有拼接上文件所在的完整目录路径,Pandas自然找不到文件啦。我来给你分享两种靠谱的解决方案,其中用pathlib的方式是目前Python处理文件路径的最优实践。
方法一:用pathlib(推荐,简洁可靠)
pathlib是Python 3.4+内置的路径处理库,语法更直观,能自动处理跨平台路径问题,还能一键遍历所有子目录的CSV文件。我们用字典来存储每个DataFrame,这样比两个列表更不容易出错,还能方便地通过文件名访问对应的DF。
import pandas as pd from pathlib import Path # 替换成你的目标目录路径(可以是相对路径或绝对路径) target_dir = Path("./your_target_directory") # 用字典存储所有DataFrame,键是文件名(不带.csv后缀),值是对应的DataFrame df_collection = {} # 遍历目录及所有子目录下的.csv文件 for csv_path in target_dir.rglob("*.csv"): # 获取文件名(去掉后缀)作为DataFrame的标识名 df_name = csv_path.stem try: # 直接传入完整路径的Path对象,Pandas能正确识别 df = pd.read_csv(csv_path) df_collection[df_name] = df print(f✅ 成功读取: {csv_path.name} → DataFrame: {df_name}") except Exception as e: print(f❌ 读取失败 {csv_path}: {str(e)}") # 之后访问DataFrame示例:df_collection["sales_report_2024"]
方法二:用os.walk(兼容旧版本Python)
如果你还在使用Python 3.4之前的版本,可以用os.walk来遍历目录,核心是一定要拼接完整的文件路径,而不是只存文件名。
import pandas as pd import os target_dir = "./your_target_directory" df_collection = {} # 遍历目录树 for root, _, files in os.walk(target_dir): for file in files: if file.endswith(".csv"): # 拼接完整路径:根目录 + 文件名 full_file_path = os.path.join(root, file) df_name = os.path.splitext(file)[0] try: df = pd.read_csv(full_file_path) df_collection[df_name] = df print(f✅ 成功读取: {file} → DataFrame: {df_name}") except Exception as e: print(f❌ 读取失败 {full_file_path}: {str(e)}")
为什么你的原方法会报错?
你之前的思路里,test列表可能只存了CSV的文件名(比如data.csv),而不是完整路径(比如./subfolder/data.csv)。当你用pd.read_csv(file)时,Pandas会在当前工作目录下查找这个文件,而不是文件实际所在的子目录,所以就抛出了FileNotFoundError。
额外建议
- 尽量用字典存储DataFrame,而不是动态创建全局变量(比如
globals()[name] = df),这样能避免命名冲突,也更方便管理所有DataFrame。 - 加上异常处理,可以快速定位哪个文件读取失败(比如文件损坏、编码问题等)。
内容的提问来源于stack exchange,提问作者Dicast
相关产品推荐
相关产品推荐

