Python按条件读取文件夹内文件名含1441的CSV文件问题求解
现有代码的问题点
fnmatch匹配规则写错:传入的匹配模式是'1441',只会匹配文件名完全等于1441的文件,既没有加通配符匹配前后内容,也没有限定CSV后缀,根本匹配不到文件名中包含1441的CSV文件- 路径拼接错误:直接用字符串拼接父目录和文件名,没有补路径分隔符,很容易拼出无效路径,跨系统运行也会出兼容性问题
- 逻辑缺陷:遍历过程中只要遇到不匹配的文件就打印error,匹配到的文件会反复覆盖
my_file变量,最终只能拿到最后一个匹配文件的内容,且大量无意义的错误提示会干扰排查
修正后可直接运行的代码
import os import fnmatch import pandas as pd path_to_parent = r"C:\Users\Desktop\books\chapter_1" # 用列表存储所有符合条件的CSV读取结果 target_df_list = [] for file_name in os.listdir(path_to_parent): # 匹配规则:文件名任意位置包含1441,后缀为.csv if fnmatch.fnmatch(file_name, '*1441*.csv'): # 用标准方法拼接完整路径,避免分隔符问题 full_file_path = os.path.join(path_to_parent, file_name) current_df = pd.read_csv(full_file_path) target_df_list.append(current_df) print(f"已读取目标文件:{file_name}") # 如果需要把所有符合条件的CSV合并为一个DataFrame,取消注释下面这行即可 # combined_df = pd.concat(target_df_list, ignore_index=True)
可选简化方案
如果不想用fnmatch,直接用Python原生字符串判断也能实现完全一致的匹配效果,代码更直观:
for file_name in os.listdir(path_to_parent): if '1441' in file_name and file_name.endswith('.csv'): # 后续读取逻辑和上面一致 full_file_path = os.path.join(path_to_parent, file_name) current_df = pd.read_csv(full_file_path) target_df_list.append(current_df)
如果使用Python3.4及以上版本,还可以用pathlib模块简化路径处理和文件匹配逻辑:
from pathlib import Path import pandas as pd path_to_parent = Path(r"C:\Users\Desktop\books\chapter_1") # 直接glob匹配所有符合规则的文件,批量读取 target_df_list = [pd.read_csv(csv_path) for csv_path in path_to_parent.glob("*1441*.csv")]
注意:如果你的文件名里的1441存在大小写变体(比如带大写字符、混写),可以把
fnmatch.fnmatch换成fnmatch.fnmatchcase关闭大小写敏感,或者字符串判断时先把文件名转成小写再判断。
内容的提问来源于stack exchange,提问作者good_vibes
相关产品推荐
相关产品推荐

