strftime时间格式化字符串命名文件和重命名

坚持写博客💪,分享自己的在学习、工作中的所得

  1. 给自己做备忘
  2. 对知识点记录、总结,加深理解
  3. 给有需要的人一些帮助,少踩一个坑,多走几步路

尽量以合适的方式排版,图文兼有
如果写的有误,或者有不理解的,均可在评论区留言
如果内容对你有帮助,欢迎点赞 👍 收藏 ⭐留言 📝。
虽然平台并不会有任何奖励,但是我会很开心,可以让我保持写博客的热情🙏🙏🙏



时间格式化字符串

在大量文件自动命名时一般会使用格式化的时间来命名。这样文件可以按时间顺序,同时避免同名

🧁time

time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# '2021-11-16 10:40:45'

部分格式化符号:

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00-59)
%S 秒(00-59)

一般日志类文件这样命名即可,但是如果是密集型的调用,可能经常会遇到命名相同的情况。因为只精确到秒,如果在一秒内需要生成多个字符串,上面的代码显然不合适。

比如将视频帧保存为图片,或者是将文件夹下的文件重命名

这时候需要使用到datetime模块

🧁datetime

from datetime import datetime

datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# '2021-11-16 10:40:45'

这样得到的字符串跟上面是相同的

加上%f来使用毫秒

datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
# '2021-11-16 11:36:26.122887'

%f 以十进制数表示的微秒,在左侧补零(000000-999999)


🧁重命名

将文件夹中的图片重命名到原来的位置

from glob import glob
import os
import time 
from datetime import datetime

img_dir = r'/path/to/img'  # 要重命名的图片的路径
imgs = glob(os.path.join(img_dir, '*.jpg'))

for img_path in imgs:
    dir = os.path.dirname(img_path)
    ext = os.path.splitext(img_path)[-1]
    time_str = datetime.now().strftime('%Y%m%d%H%M%S-%f')  # 精确到毫秒,因为是重命名,不精确到毫秒经常会同名报错 '20211116093401-996794'
    new_name = os.path.join(dir, f'{time_str}{ext}')
    if os.path.exists(new_name):
        time.sleep(0.01)
        time_str = datetime.now().strftime('%Y%m%d%H%M%S-%f')
        new_name = os.path.join(dir, f'{time_str}{ext}')
    # print(new_name)
    os.rename(img_path, new_name)

也可以将文件重命名并换到其他路径中

from glob import glob
import os
import time 
from datetime import datetime

img_dir = r'/path/to/img'  # 要重命名的图片的路径
dest_dir = r'/path/to/img2'
os.makedirs(dest_dir, exist_ok=True)

imgs = glob(os.path.join(img_dir, '*.jpg'))

for img_path in imgs:
    # dir = os.path.dirname(img_path)
    ext = os.path.splitext(img_path)[-1]
    time_str = datetime.now().strftime('%Y%m%d%H%M%S-%f')  # 精确到毫秒,因为是重命名,不精确到毫秒经常会同名报错 '20211116093401-996794'
    new_name = os.path.join(dest_dir, f'{time_str}{ext}')
    if os.path.exists(new_name):
        time.sleep(0.01)
        time_str = datetime.now().strftime('%Y%m%d%H%M%S-%f')
        new_name = os.path.join(dest_dir, f'{time_str}{ext}')
    # print(new_name)
    os.rename(img_path, new_name)

会将img_dir中的文件重命名并移动到dest_dir,注意是移动不是复制

当文件是按一定顺序命名时,如果直接用glob,得到的顺序会是所有1开头的文件会在2开头的文件前。这时候需要将文件重新排序,也可以直接按照文件序号重新命名:

import os
import time 
from datetime import datetime
from glob import glob

img_dir = r'/path/to/img'  # 要重命名的图片的路径
# imgs = glob(os.path.join(img_dir, '*.jpg'))
imgs = [os.path.join(img_dir, f'{i}.jpg') for i in range(1, 10000)]  # range(1, 10000):1--9999
for img_path in imgs:
    if not os.path.exists(img_path):
        continue
    dir = os.path.dirname(img_path)
    ext = os.path.splitext(img_path)[-1]
    time_str = datetime.now().strftime('%Y%m%d%H%M%S-%f')  # 精确到毫秒,因为是重命名,不精确到毫秒经常会同名报错 '20211116093401-996794'
    new_name = os.path.join(dir, f'{time_str}{ext}')
    if os.path.exists(new_name):
        time.sleep(0.01)
        time_str = datetime.now().strftime('%Y%m%d%H%M%S-%f')
        new_name = os.path.join(dir, f'{time_str}{ext}')
    # print(new_name)
    os.rename(img_path, new_name)


如果内容对你有帮助,或者觉得写的不错
🏳️‍🌈欢迎点赞 👍 收藏 ⭐留言 📝
有问题,请在评论区留言

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ayiya_Oese

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

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

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

打赏作者

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

抵扣说明:

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

余额充值