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

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)

二、修复“文件不存在”报错

报错核心原因通常是仅使用文件名而未拼接完整文件路径,或者文件路径错误。解决步骤如下:

  1. 获取文件完整路径:遍历目录时,务必用os.path.join拼接目录路径与文件名,避免相对路径问题。
  2. 前置文件存在校验:打开文件前先判断文件是否存在,避免无效操作。

完整修复代码示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:25:17