PHP脚本,用于统一文件名中日期格式

#该脚本用于将所有日期格式调整为YYYYMMDD格式,例如:20230101
#date:20230609
#mail:hhb_618@163.com


import os
import re
import datetime

# 输入要操作的目录
dir_path = "/mnt/e/date_rename"


target_strs = ["20232023.", "20232023-","20232023_"]

# 获取当前年份
current_year = datetime.datetime.now().year

# 处理日期格式为x月xx日的文件名
for filename in os.listdir(dir_path):
    full_path = os.path.join(dir_path, filename)
    if os.path.isfile(full_path) or os.path.isdir(full_path):
        new_name = re.sub(r'([1-9]|1[0-2])月([1-9]|[1-2][0-9]|3[0-1])', rf'{current_year}\g<1>\g<2>', filename)
        os.rename(full_path, os.path.join(dir_path, new_name))

# 处理日期格式为x.xx、x-xx、0x-xx、0xxx的文件名,以及202363格式
for filename in os.listdir(dir_path):
    full_path = os.path.join(dir_path, filename)
    if os.path.isfile(full_path) or os.path.isdir(full_path):
        # 使用正则表达式将日期格式转换为“2023xxxx”的形式
        new_name = re.sub(r'(?<![0-9])([0-9]{1,2})[.-]?([0-9]{1,2})(?![0-9])', rf'{current_year}\1\2', filename)
        new_name = re.sub(r'(?<![0-9])([0-9]{1,2})[._]?([0-9]{1,2})(?![0-9])', rf'{current_year}\1\2', filename)
        new_name = re.sub(r'(?<![0-9])0([0-9]{3})(?![0-9])', rf'{current_year}\1', new_name)
        new_name = re.sub(r'(?<!\d)(\d{4})(\d{2})(\d{2})(?!\d)', r'\1\2\3', new_name)
        os.rename(full_path, os.path.join(dir_path, new_name))


# 遍历该目录下所有文件夹
for folder_name in os.listdir(dir_path):
    # 判断是否为文件夹
    if os.path.isdir(os.path.join(dir_path, folder_name)):
        # 判断文件夹名称中是否包含目标字符串
        for target_str in target_strs:
            if target_str in folder_name:
                # 将目标字符串替换为空
                new_name = folder_name.replace(target_str, "")
                # 使用os.rename方法进行修改
                os.rename(os.path.join(dir_path, folder_name), os.path.join(dir_path, new_name))
                break   # 跳出内层循环,处理下一个文件夹


#将202363转换为20230603
# 定义正则表达式匹配模式
pattern = re.compile(r'\d{4}\d{0,1}\d{0,1}\d{0,1}')

# 遍历该目录下所有文件夹
for folder_name in os.listdir(dir_path):
    # 判断是否为文件夹
    #if os.path.isdir(os.path.join(dir_path, folder_name)):
        # 匹配目标字符串
        match = pattern.search(folder_name)

        if match:
            # 获取匹配到的字符串
            target_str = match.group()
            # 将目标字符串中的非必要零替换为空

            if len(target_str) != 6:
                continue

            new_str = target_str.lstrip("0")
            # 将新格式日期字符串按照 YYYY-MM-DD 格式进行重新格式化
            new_str = "".join([new_str[0:4], new_str[4:5].rjust(2, '0'), new_str[5:].rjust(2, '0')])
            # 使用re.sub方法进行替换
            new_name = re.sub(pattern, new_str, folder_name)
            # 重命名该文件夹
            os.rename(os.path.join(dir_path, folder_name), os.path.join(dir_path, new_name))



#将2023512转换为20230512
pattern = re.compile(r'\d{4}[01]?\d')

for folder_name in os.listdir(dir_path):
    # 判断是否为文件夹
    #if os.path.isdir(os.path.join(dir_path, folder_name)):
        # 匹配目标字符串
        match = pattern.search(folder_name)
        if match:
            # 获取匹配到的字符串
            target_str = match.group()
            # 判断该日期格式是否为 YYYYM 格式
            if len(target_str) != 5:
                continue
            # 将新格式日期字符串按照 YYYYMM 格式进行重新格式化
            new_str = "".join([target_str[0:4], target_str[4:].rjust(2, '0')])
            # 使用re.sub方法进行替换
            new_name = re.sub(pattern, new_str, folder_name)
            # 重命名该文件夹
            os.rename(os.path.join(dir_path, folder_name), os.path.join(dir_path, new_name))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hhb_618

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值