如何在Python中用类Unix通配符读取动态命名文件至Pandas DataFrame
使用通配符匹配动态文件名并读取到Pandas DataFrame
你的问题在于只拼接了日期部分,但文件名末尾还有动态变化的字符,所以需要借助glob模块来处理类Unix风格的通配符匹配,它能帮你找到符合特定模式的所有文件。
下面是具体的解决步骤和代码:
步骤说明
- 首先导入
glob模块(Python标准库自带,无需额外安装),它专门用于处理文件路径的模式匹配 - 构造包含通配符的文件路径模式:用
*来匹配日期后面的任意动态字符 - 获取匹配到的文件路径列表,同时处理可能的“无匹配文件”或“多文件匹配”情况
- 用Pandas读取目标文件
完整代码示例
import pandas as pd import time import glob # 生成指定格式的日期字符串 T = time.strftime("%m_%d_%Y") # 构造匹配模式:匹配以「file_日期_」开头的所有文件 file_pattern = f"file_{T}_*" # 获取所有符合模式的文件路径 matching_files = glob.glob(file_pattern) # 处理匹配结果的边界情况 if not matching_files: raise FileNotFoundError(f"No files found matching pattern: {file_pattern}") elif len(matching_files) > 1: print(f"提示:找到多个匹配文件,将使用第一个:{matching_files[0]}") # 读取第一个匹配到的文件到DataFrame df = pd.read_csv(matching_files[0])
补充优化方案
如果你的项目更倾向于使用现代路径处理方式,可以用pathlib模块替代glob,代码会更简洁直观:
import pandas as pd import time from pathlib import Path T = time.strftime("%m_%d_%Y") file_pattern = f"file_{T}_*" # 查找当前目录下符合模式的文件 matching_files = list(Path(".").glob(file_pattern)) if matching_files: df = pd.read_csv(matching_files[0]) else: raise FileNotFoundError(f"No files found for pattern {file_pattern}")
如果需要递归查找子目录里的文件,只需要给glob方法加上recursive=True参数即可。
内容的提问来源于stack exchange,提问作者Rajesh
相关产品推荐
相关产品推荐

