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

wuchangjian2021-11-16 13:55:05编程学习

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

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

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



文章目录

    • 时间格式化字符串
    • 🧁time
    • 🧁datetime
    • 🧁重命名

时间格式化字符串

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

🧁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)


🧁重命名

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

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)

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

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,注意是移动不是复制



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

相关文章

SpringCloud最新2021年面试题大汇总,附答案

SpringCloud最新2021年面试题大汇总,附答案

1、设计微服务的最佳实践是什么? 以下是设计微服务的最佳实践࿱...

Navicat定时 同步数据库

Navicat定时 同步数据库

Navicat定时在MySQL与MySQL数据库之间自动传输数据 来由࿱...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。