背景需求
今天在整理py代码,看到以前遗留一个程序——如何给一个文件夹里面的所有文件(各种格式,文件夹\word\ppt\py\excle\txt)前面批量加序号(从01-10)
问题:
比如下面各种格式的文件,我需要前面加序号,便于观看查找。它的编号方式会怎样?会按照现有的顺序(文件夹-txt-py-ppt-xls)从小到大排序吗?(见下图)
代码
# https://blog.csdn.net/GX1415926535/article/details/126930440?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-126930440-blog-116981534.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-126930440-blog-116981534.pc_relevant_multi_platform_whitelistv4&utm_relevant_index=7
import os
path = r"D:\test\1"
namelist = os.listdir(path)
for i, name in enumerate(namelist):
old_name = path + "\\" + name
new_name = path + "\\" + '{:0>2d}'.format(i+1) + " " + name # 2位数 从01开始
# new_name = path + "\\" + name[5:] # 这一步用来逆操作
os.rename(old_name, new_name)
从结果来看
编号不按照原有排序编号。
排序与各类格式无关(ppt/xlsx/文件夹)
排序原则:根据文件名首字母——先数字、再英文、再汉字排列
数字内部从1到“无穷”,英文内部从A-Z,汉字内部首汉字拼音排序A-Z
验证
结论:
如果一个文件夹内部的文件有多种格式,用Python批量添加“前缀序号”,其排列方式如下:
排序根据文件名首字母——先找所有首字为“数字”的文件名字(不分文件夹和其他格式)进行排序(01,02,03……)、排完数字后,再按照“英文A-Z”对文件名字(不分文件夹和其他格式)的首字母进行排序(04,05,06……)、最后对首字为汉字的文件名字(不分文件夹和其他格式)的第一个汉字的拼音进行排序(07,08,09……)。
基于这种排列方法,在混合各种格式的文件中,通常文件夹(黄色)会在文件最上面或最下面(序号都是从小到大或从大到小排列。),其他类型文件在最下面或最上面(序号都是从小到大或从大到小排列。)
由于是根据“数字、英文、汉字”并“文件夹在最前”的规律,因此混合各种格式的文件夹里,新增的序号一般很难做到完全按照升序(从01 02……)或者降序(10 09……)排列。
启示:
日常建立的各类格式文件的文件名需要添加“日期”前缀
日常文件名设置最好在前面加一个“日期”,可以保证每类文件都能按“数字”排序(不要英文、汉字混排)
加了序号,更容易查找(复制、黏贴纸类的)
对于通讯类资料的整理
日常工作中,我干的最普遍的就是写“科研比赛”“活动通讯”,当各种资料汇总到一起,看起来就非常不便利。所以非常需要加”序号+空格“进行区分。了解总数,并方便 掌握记忆文件的序号
如:竞赛类(正文、附件、通知):总是先出现“文件夹”后出现‘其他格式“
如:通讯类(通讯、照片、网络通知、获奖名单等) 加数字序号后,有一种规范的感觉。并能快速知道文件总数。
PS:删除序号
如果对于已经批量的序号不满意,也可以删除前缀序号
1、以下11个文件序号添加“前缀序号”
2、执行程序(后半段隐藏)运行后效果。
3、运行后效果:
问题:我对这个排序号不满意,想要删除前面的序号
把第二部分隐藏的程序显示出来。把第一部分加序号的代码隐藏
2、运行后添加的序号没有了
因为序号后面有一个空格,以空格为分割点,保留空格后面的内容。这种情况下后面的文件名名称中不能有空格。
3、文件又恢复原始状态(但又一个文件缩短了,说明里面两个空格)
重点提示:
因此原始文件名中尽量不要出现空格,实在需要空格,可以用“_"替代。
数字作为首字是最好的文件名排序对象,每个文件最好都能用时间作为文件名起始信息。