使用Pandas结合glob读取带通配符CSV文件时遇值错误求助
解决Python中glob匹配CSV后pd.read_csv报错的问题
嘿,这个问题我之前也碰到过!核心原因是glob.glob('somefile*.csv')返回的是文件路径的列表,而pd.read_csv()需要的是单个文件路径字符串(或者文件对象),直接把列表传进去肯定会触发ValueError。下面分几种场景给你解决方案:
场景1:目录里只有一个匹配的CSV文件
如果确定目录里只会有一个符合somefile*.csv规则的文件,直接取列表的第一个元素就行,还可以加个判断确保不会出错:
import glob import pandas as pd # 获取所有匹配的文件路径(列表形式) file_list = glob.glob('somefile*.csv') # 先校验文件数量,避免意外 if len(file_list) != 1: raise ValueError(f"预期找到1个匹配的CSV文件,但实际找到{len(file_list)}个") # 读取第一个(也是唯一一个)文件 df = pd.read_csv(file_list[0])
场景2:目录里有多个匹配的CSV文件,需要合并成一个DataFrame
如果有多个符合规则的CSV,想把它们合并成一个大的DataFrame,可以用列表推导式循环读取,再用pd.concat合并:
import glob import pandas as pd file_list = glob.glob('somefile*.csv') # 循环读取每个文件,存入列表 df_collection = [pd.read_csv(file_path) for file_path in file_list] # 合并所有DataFrame,ignore_index重置索引 combined_df = pd.concat(df_collection, ignore_index=True)
场景3:需要逐个处理每个CSV并输出结果
如果要对每个匹配的CSV单独处理,再输出到新文件,可以用循环遍历列表:
import glob import pandas as pd file_list = glob.glob('somefile*.csv') for file_path in file_list: # 读取单个文件 df = pd.read_csv(file_path) # 这里写你的数据处理逻辑,比如清洗、计算等 processed_df = df # 替换成你的实际处理代码 # 生成输出文件名(比如在原文件名后加"_processed") output_filename = f"{file_path.rsplit('.', 1)[0]}_processed.csv" # 输出处理后的文件,index=False避免写入默认索引 processed_df.to_csv(output_filename, index=False)
总结一下,记住glob.glob返回的是列表类型,而pd.read_csv只接受单个路径,所以一定要先把列表转换成单个路径(单文件场景),或者循环处理列表里的每个元素(多文件场景)。
内容的提问来源于stack exchange,提问作者Kvothe
相关产品推荐
相关产品推荐

