当前位置: 首页 > news >正文

【办公类-19-03】办公中的思考——Python批量统一文件名的序号(保教主任整理打印文件)

背景需求:

为迎接督导检查,保教主任从各条线收集文本资料。并在每个文件名称前手动编号。但是她嘀咕道:”为什么两套资料放在一个文件里就不是按照数字序号排序?,有的是1X-,有的是40X,看起来很乱”

我提示她按“名称”把文件名排序,果然实现了“先1后4”数字排序模式。

同时我也看到,她用了两类数字格式:第一类是“工作计划,编号为1-X;第二类为考评表,编号为40X。看起来模式不统一。

”幸好这些文件只有2位数的数量,要是100份,还要编号3位数001-999“

于是我自告奋勇,要调整所有的数字序号为”0X-XX (空格)“的样式(不超过50份,两位数)

思路:

  1. 分析现有首数字情况:

(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 timepath =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 timepath =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 timepath =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 timepath =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个数字,

启示

因此,用Python编号不仅比人工编号速度块,同时也比人工编号准确度高,也有批量修改编号的可能性(编号数字后面加空格,便于切割修改)

http://www.lryc.cn/news/28746.html

相关文章:

  • MySQL约束
  • x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建
  • 找工作经验分享
  • C语言学习之路--操作符篇,从知识到实战
  • 【华为OD机试2023】端口合并 C++ Java Python
  • C++常用头文件整理
  • Linux内核4.14版本——drm框架分析(2)——connector分析
  • dev GridControl 按条件纵向合并单元格
  • aws eks 集群初始化过程中pause容器的启动逻辑
  • Numpy专栏目录(长期更新)
  • English Learning - L2 第1次小组纠音 [ɑː] [ɔː] [uː] 2023.2.25 周六
  • 博客系统程序(页面设计)
  • 【死锁的排查工具有哪些?】
  • JUC包:CyclicBarrier源码+实例讲解
  • Trace、Metrics、Logging 选型
  • Java验证码
  • 5天带你读完《Effective Java》(四)
  • 探索密码学的未来:SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算
  • 【教程】去水印开源工具Lama Cleaner在Windows的安装和使用
  • 驾考笔记_2023
  • 【架构师】跟我一起学架构——调用链
  • [神经网络]Swin Transformer网络
  • 【分布式】什么是分布式,分布式和集群的区别又是什么?答案在正文。
  • MyBatis框架的入门案例
  • 红黑树-随记
  • Python异常处理更新,正常和不正常的都在这里
  • [数据结构]:10-二叉排序树(无头结点)(C语言实现)
  • openstack浅析
  • 华为OD机试Golang解题 - 特异性双端队列 | 含思路
  • 代码随想录中:回溯算法的基础