Python提取未知文件名中的日期及解决文件操作报错
解决Python提取文件名日期及文件操作报错问题
一、正确提取文件名中的日期/数字
针对文件名中包含8位日期格式(YYYYMMDD)的场景,直接用正则匹配连续8位数字即可,无需复杂规则。如果文件名中存在其他零散数字,可通过限定数字位置(比如后缀前)进一步精准匹配。
核心代码示例
import re import os # 示例文件名,实际可替换为遍历得到的文件名 filename = "micro20230125.txt" # 匹配8位日期数字(YYYYMMDD格式) date_match = re.search(r'\d{8}', filename) if date_match: extracted_date = date_match.group() print(f"提取到的日期:{extracted_date}") # 输出:20230125 else: print("文件名中未找到符合格式的日期")
进阶:匹配后缀前的日期
如果文件名存在其他数字,可限定匹配.txt等后缀前的8位数字:
date_match = re.search(r'(\d{8})\.\w+$', filename) if date_match: extracted_date = date_match.group(1)
二、修复“文件不存在”报错
报错核心原因通常是仅使用文件名而未拼接完整文件路径,或者文件路径错误。解决步骤如下:
- 获取文件完整路径:遍历目录时,务必用
os.path.join拼接目录路径与文件名,避免相对路径问题。 - 前置文件存在校验:打开文件前先判断文件是否存在,避免无效操作。
完整修复代码示例
import re import os # 目标文件所在目录(替换为你的实际目录) target_dir = "./data" # 遍历目录下的所有文件 for filename in os.listdir(target_dir): # 跳过目录,只处理文件 if not os.path.isfile(os.path.join(target_dir, filename)): continue # 提取日期 date_match = re.search(r'\d{8}', filename) if not date_match: continue extracted_date = date_match.group() # 拼接完整文件路径 full_file_path = os.path.join(target_dir, filename) # 校验文件存在后再操作 if os.path.exists(full_file_path): # 示例:读取文件内容 with open(full_file_path, 'r', encoding='utf-8') as f: content = f.read() print(f"读取文件 {filename} 成功,提取日期:{extracted_date}") else: print(f"文件 {full_file_path} 不存在,跳过")
常见问题排查
- 如果正则仍匹配不到:检查文件名的日期格式是否为8位,若为其他格式(如YYYY-MM-DD),需修改正则为
r'\d{4}-\d{2}-\d{2}'。 - 如果文件仍报错:检查
target_dir是否为绝对路径,或者当前工作目录是否正确(可通过print(os.getcwd())查看)。
内容的提问来源于stack exchange,提问作者Aida
相关产品推荐
相关产品推荐

