首页 > 编程语言 >Python实践(2):文件批量重命名

Python实践(2):文件批量重命名

时间:2023-03-28 16:55:05浏览次数:48  
标签:重命名 ... digit XXX Python xxx filenames oldname 文件批量

最近的工作中遇到了这样的问题:某一批文件以"XXX_1.xxx","XXX_2.xxx"..."XXX_11.xxx","XXX_12.xxx"...命名,在我的电脑上它是以数字从小到大的方式排序的,但在另一台设备上则是以字典序排序的,即"XXX_1.xxx","XXX_11.xxx","XXX_12.xxx"..."XXX_2.xxx","XXX_21.xxx"...,为了解决这个问题,我尝试为这些文件的序号添加前缀0,改为"XXX_001.xxx","XXX_002.xxx"..."XXX_011.xxx","XXX_012.xxx"...的形式.

实现的方法是遍历所有文件,将文件名排序,然后逐个改名即可.

# -*- coding: UTF-8 -*-
import os
from functools import cmp_to_key
def digit_id(s): #返回字符串尾部的数字是从第几位开始的
    for i in range(-1,-len(s)-1,-1):
        if(not s[i].isdigit()):
            return i+1
    return -len(s)
def cmp(t1,t2): #自定义比较函数
    filename1=t1.split('.',1)[0]
    num1=filename1[digit_id(filename1):]
    filename2=t2.split('.',1)[0]
    num2=filename2[digit_id(filename2):]
    return int(num1)-int(num2)

workpath='./'
filenames=filter(lambda x:x[-4:]=='.jpg', os.listdir(workpath)) #只读取jpg类型的文件
filenames=sorted(filenames,key=cmp_to_key(cmp))
print(filenames)
l=-digit_id(filenames[-1].split('.',1)[0]) #找出位数最大的那个文件是多少位
for i in range(len(filenames)): #开始重命名
    oldname=filenames[i].split('.',1)
    d=digit_id(oldname[0])
    newname=oldname[0][:d]+('0'*(l+d))+oldname[0][d:]+'.'+oldname[1]
    os.rename(os.path.join(workpath,filenames[i]),os.path.join(workpath,newname))

 

标签:重命名,...,digit,XXX,Python,xxx,filenames,oldname,文件批量
From: https://www.cnblogs.com/isakovsky/p/17265853.html

相关文章

  • 100道python基础题——(20)
    题:使用生成器定义一个类,该生成器可以在给定范围0和n之间迭代可被7整除的数字。提示:考虑使用yield。 yield使用方法:(34条消息)python中yield的用法详解——最简单,最清......
  • 通过Python SDK管理告警
    本文介绍通过PythonSDK使用告警的代码示例。前提条件已安装0.7.9及以上版本的PythonSDK。更多信息,请参见安装PythonSDK。管理告警监控规则代码示例如下。具体的......
  • Python中21道个程序小练习
    1.使用格式化输出的三种方式实现以下输出(name换成自己的名字,既得修改身高体重,不要厚颜无耻)name='ABDMLBM'height=175weight=140#"Mynameis'Nick',myheigh......
  • python opencv canny
    pythonopencvcanny importcv2#Loadtheimageimg=cv2.imread('path/to/image.jpg')#Converttheimagetograyscalegray=cv2.cvtColor(img,cv2.COLOR......
  • Python: Exception
     raisefromtry:try:1/0exceptZeroDivisionErrorase:raiseException("with_traceback")fromeexceptExceptionase:print......
  • opencv-python 4.2图像的几何变化
    转换OpenCV提供了两个转换函数cv.warpAffine和cv.warpPerspective,你可以使用它们进行各种转换。cv.warpAffine采用2x3变换矩阵作为参数输入,而cv.warpPerspective采用3x3变......
  • python generator相关
    本文的重点介绍python中的yield用法及这样的表达式:comp_list=[x*2forxinrange(10)] -- ListComprehensions和(x**2forxinrange(10)) -- Generato......
  • python笔记3(字典)
    字典1.字典的创建1.{}2.dict()3.通过fromkeys创建值为空的字典2.字典元素的访问通过get()方法以a={"name":"jiachao","age":20,"school":"tongda"}为例如若结......
  • python笔记4(控制语句)
    控制语句一:选择结构A:单分支结构if(条件语句):(缩进)结果缩进:pytharm中默认四个空格=TAB键例:a=input("请输入一个小于10的数:")ifint(a)<10:print(a)运行结果:条......
  • python 视频转代码视频
     #-*-coding:utf-8-*-#coding:utf-8importargparseimportosimportcv2importsubprocessfromcv2importVideoWriter,VideoWriter_fourcc,imread,resizefr......