背景需求:
为迎接督导检查,保教主任从各条线收集文本资料。并在每个文件名称前手动编号。但是她嘀咕道:”为什么两套资料放在一个文件里就不是按照数字序号排序?,有的是1X-,有的是40X,看起来很乱”
我提示她按“名称”把文件名排序,果然实现了“先1后4”数字排序模式。
同时我也看到,她用了两类数字格式:第一类是“工作计划,编号为1-X;第二类为考评表,编号为40X。看起来模式不统一。
”幸好这些文件只有2位数的数量,要是100份,还要编号3位数001-999“
于是我自告奋勇,要调整所有的数字序号为”0X-XX (空格)“的样式(不超过50份,两位数)
思路:
分析现有首数字情况:
(1)第一种是三个字符”1-X“,变成6个字符(0X-XX(空格))
(1)第二种是三个字符”40X“,变成6个字符(04-XX(空格))
一开始,我尝试用”某个字“切割然后拼接的方法,比如数字4作为分割点,拼接新的名字,
但是出现了404这个docx后面的名称都不见的问题。(要因为有两个4,但是提取时只选择第1个4到第2个4之间的信息。第2个4后面的文件名被忽略。
所以分割改名法不是完全通用的改名神器,而要使用”正则表达式“提取需要保留的部分
第一步:分类(两个格式——401类&1-1类)
|
|
第1步:简单——修改401类
特点:18分文件名都是前3位数(占3个位置,并且与后面文件名中间没有空格),改成“04-01(空格)”的格式
思路:第1个4是共有的,需要改成“04-”,第2-3位数字是号码,序号变成“01 ”“02 ”……“18 ”(后面有空格)
import os
import time
path =r"C:\Users\jg2yXRZ\OneDrive\桌面\2023年2月督导室检查资料 - 副本\401"
fileList=os.listdir(path)
a=1
for file in fileList:
# 04-是共有的信息,后面2-3位是a的变化数字默认2位数,
# file[3:]代表文倩前三个数字被删除,保留2个数字后面部分的信息(包含docx)
newname='04-{} '.format('%02d'%a)+file[3:]
# 文件旧路径
oldname_path = os.path.join(path,file)
# 文件新路径
newname_path = os.path.join(path,newname)
# 新旧对调
os.rename(oldname_path, newname_path)
a+=1
关键点
第2步:略复杂——修改1-1类
特点:18分文件名都是前3位数(占3个位置,与文件名中间部分有空格,部分无空格),改成“04-01(空格)”的格式
思路:第1个数字有1、2、3,第2个字是“-”,第3-4位有1位数、也有2位数。需要改成“0X-0X”
问题:由于1-X这套文件中前面数字的长度不统一,所以修改起来略复杂
步骤1:因为有一个1-10,所以先通过'-',把数字改成0x-0X(10前面也加0)
import os
import time
path =r"C:\Users\jg2yXRZ\OneDrive\桌面\2023年2月督导室检查资料 - 副本\1-1 - 副本"
fileList=os.listdir(path)
# a=1
for file in fileList:
split_str = file.split('-')
newname1 = split_str[0] # _的第0部分=序号
print(newname1)
newname2= split_str[1] # _的第0部分=序号
print(newname2)
newname='0'+newname1+'-0'+newname2
# 文件旧路径
oldname_path = os.path.join(path,file)
# 文件新路径
newname_path = os.path.join(path,newname)
# 新旧对调
os.rename(oldname_path, newname_path)
因为就1个01-010,所以我就手动删除了左边的0(见下图),保证前面四个数字占五个格子——“0X-0X”
步骤2:删除各种空格(序号与汉字之间有不同长度的空格)
import os
import time
path =r"C:\Users\jg2yXRZ\OneDrive\桌面\2023年2月督导室检查资料 - 副本\1-1 - 副本"
for filename in os.listdir(path):
newName = str(filename)
newName = newName.replace(' ', '') #此处可以自行修改变成去除空格or去除逗号等等
os.rename(os.path.join(path,filename),os.path.join(path,newName))
print("文件: ",filename,"——>",newName," 重命名已完成!")
步骤3,提取前5个字、提取后N个汉字,中间加空格
import os
import time
path =r"C:\Users\jg2yXRZ\OneDrive\桌面\2023年2月督导室检查资料 - 副本\1-1 - 副本"
fileList=os.listdir(path)
for file in fileList:
# file[0:5]代表文件前5个数字,file[5:]代表文件前后面的所有汉字和后缀),组合后中间加空格
newname1=file[0:5]
newname2=file[5:]
newname=newname1+' '+newname2
# 文件旧路径
oldname_path = os.path.join(path,file)
# 文件新路径
newname_path = os.path.join(path,newname)
# 新旧对调
os.rename(oldname_path, newname_path)
所有的号码都统一了(前后对比)
|
|
为什么运行前最后的编号是418(4号文件18′),运行后编号04-19(4号文件19份)?
查了一下,原来之前保教主任提供的文件是手动编号,其中有错误(编了两个415后面416-418实际少了;但用Python遍历循环编a=1 a+=1中,就会自动生成19个数字,