如何遍历子文件夹并读取任意文件名的.csv后缀文件
问题原因
- 直接用
folder / '*.csv'是把通配符当做普通文件名拼接路径,不会触发通配符匹配逻辑,无法找到对应文件 - 额外逻辑错误:你需要读取csv格式文件,却调用了
pd.read_excel()方法,接口不匹配也会导致读取失败
修正代码
使用Path对象自带的glob()方法实现后缀名匹配,同时修改对应读取接口即可:
import pandas as pd from pathlib import Path folder_names = [] spreadsheet_contents = [] all_data = pd.DataFrame() current_directory = Path.cwd() for folder in current_directory.iterdir(): # 跳过当前目录下的文件,只遍历子文件夹 if not folder.is_dir(): continue folder_names.append(folder.name) # 匹配当前子文件夹下所有后缀为.csv的文件 for csv_file in folder.glob('*.csv'): # 若确认每个子文件夹只有1个csv,可直接用 csv_file = next(folder.glob('*.csv')) 取第一个匹配结果 df = pd.read_csv(csv_file, skiprows = 1, header = None, usecols = [5]) spreadsheet_contents.append(df) # 如需合并所有读取结果到all_data,可打开下方注释 # all_data = pd.concat(spreadsheet_contents, ignore_index=True)
补充说明
- 如果你的csv是Excel导出的特殊编码文件,读取时可新增
encoding参数解决乱码问题,常用参数值为gbk、utf-8-sig - 如果需要匹配子文件夹下多级目录的csv文件,可将
glob('*.csv')替换为rglob('*.csv')实现递归匹配
内容的提问来源于stack exchange,提问作者7Programmer
相关产品推荐
相关产品推荐

