You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:48:14