批量读取coins文件夹CSV至DataFrame列表报错求助
解决读取coins文件夹下所有CSV到DataFrame列表的问题
我来帮你搞定这个问题!你遇到的两个报错其实是两个不同的问题叠加导致的,咱们一步步拆解解决:
问题分析
你的原代码有两个核心问题:
- 遍历方式错误:
for file in './coins'其实是在遍历字符串'./coins'的每个字符,而不是读取文件夹里的文件。这就导致你拼接出来的路径会是./coins/.、./coins/c这种无效路径,自然触发IsADirectoryError(因为.是当前目录)。 - CSV格式问题:去掉
engine='python'后触发的ParserError,说明你的CSV文件可能存在格式不规范的情况(比如换行符异常、分隔符不一致),pandas默认的C引擎处理不了,需要用Python引擎来兼容。
正确解决方案
我们需要先准确筛选出coins文件夹下所有的.csv文件,再逐个用Python引擎读取并存入列表。这里提供两种常用方法:
方法1:使用glob模块(推荐,代码更简洁)
import pandas as pd import glob # 精准匹配coins文件夹下所有.csv文件 csv_file_paths = glob.glob('./coins/*.csv') # 初始化空列表存储DataFrame logs_total = [] # 遍历读取每个文件 for file_path in csv_file_paths: try: # 使用python引擎处理格式不规范的CSV df = pd.read_csv(file_path, engine='python') logs_total.append(df) print(f"成功读取文件: {file_path}") except Exception as e: # 捕获异常,避免单个文件失败导致整个程序终止 print(f"读取文件 {file_path} 时出错: {str(e)}")
方法2:使用os模块(更灵活,适合复杂目录场景)
import pandas as pd import os # 定义目标文件夹路径 target_dir = './coins' # 筛选出文件夹下所有.csv文件的完整路径 csv_file_paths = [ os.path.join(target_dir, filename) for filename in os.listdir(target_dir) if filename.endswith('.csv') and os.path.isfile(os.path.join(target_dir, filename)) ] logs_total = [] for file_path in csv_file_paths: try: df = pd.read_csv(file_path, engine='python') logs_total.append(df) except Exception as e: print(f"处理文件 {file_path} 失败: {str(e)}")
关键说明
glob.glob('./coins/*.csv')会直接返回所有符合条件的CSV文件路径,不会包含目录项,从根源避免IsADirectoryError。engine='python'会用纯Python实现的解析器处理CSV,能兼容更多不规范的格式,解决ParserError问题。- 加入
try-except块可以避免单个文件读取失败导致整个程序崩溃,方便排查问题文件。
内容的提问来源于stack exchange,提问作者coding404
相关产品推荐
相关产品推荐

