使用glob、os配合Pandas读取CSV文件时遇到错误
解决读取目录下所有文件而非仅CSV时的Pandas问题
你提到之前指定CSV后缀的读取代码能正常运行,但当尝试读取目标路径下所有文件(不限制为CSV类型)时遇到了问题——虽然你没贴出具体报错,但十有八九是目录里混了非CSV格式的文件,导致read_csv解析失败。我给你两个针对性的解决方案:
方案一:放宽文件类型(仅读取可解析的文本格式)
如果你只是想扩展可读取的文件类型(比如CSV、TSV、纯文本),可以用多模式匹配,同时根据文件后缀调整读取参数:
import os from glob import glob import pandas as pd path = '/Volumes/File/Names/Stuff 2016' # 按需添加你需要支持的文件后缀 supported_patterns = ['*.csv', '*.tsv', '*.txt'] all_target_files = [] # 收集所有符合模式的文件 for pattern in supported_patterns: all_target_files.extend(glob(os.path.join(path, pattern))) for filename in all_target_files: # 根据后缀自动选择分隔符 if filename.endswith('.csv'): delimiter = ';' elif filename.endswith('.tsv'): delimiter = '\t' else: delimiter = ' ' # 纯文本默认用空格分隔,可按需调整 try: qu = pd.read_csv(filename, delimiter=delimiter, header=0, skiprows=24, nrows=2) print(f"✅ 读取成功 [{filename}]:\n{qu}\n") except Exception as e: print(f"❌ 读取失败 [{filename}]: {str(e)}\n")
方案二:遍历所有文件(跳过不可解析的文件)
如果确实要遍历目录下所有文件(包括非文本格式),一定要加异常处理,避免单个错误文件中断整个循环:
import os from glob import glob import pandas as pd path = '/Volumes/File/Names/Stuff 2016' # 匹配目录下所有文件(包括子文件,不包括子目录) all_files = [f for f in glob(os.path.join(path, '*')) if not os.path.isdir(f)] for filename in all_files: try: qu = pd.read_csv(filename, delimiter=';', header=0, skiprows=24, nrows=2) print(f"✅ 读取成功 [{filename}]:\n{qu}\n") except Exception as e: # 打印错误信息但继续循环 print(f"⏭️ 跳过文件 [{filename}]: 无法解析为CSV - {str(e)}\n")
额外小建议
我把你原来的from pandas import*改成了import pandas as pd——直接导入整个模块的所有内容很容易和numpy、math这些库的函数重名,不仅会引发奇怪的bug,代码可读性也会变差,建议养成用模块别名的习惯~
内容的提问来源于stack exchange,提问作者Kimi
相关产品推荐
相关产品推荐

