坚持写博客💪,分享自己的在学习、工作中的所得
- 给自己做备忘
- 对知识点记录、总结,加深理解
- 给有需要的人一些帮助,少踩一个坑,多走几步路
尽量以合适的方式排版,图文兼有
如果写的有误,或者有不理解的,均可在评论区留言
如果内容对你有帮助,欢迎点赞 👍 收藏 ⭐留言 📝。
虽然平台并不会有任何奖励,但是我会很开心,可以让我保持写博客的热情🙏🙏🙏
时间格式化字符串
在大量文件自动命名时一般会使用格式化的时间来命名。这样文件可以按时间顺序,同时避免同名
🧁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)
如果内容对你有帮助,或者觉得写的不错
🏳️🌈欢迎点赞 👍 收藏 ⭐留言 📝
有问题,请在评论区留言