实践项目:消除缺失的编号
2018-03-25 本文已影响0人
vendettar
项目要求:编写一个程序, 在一个文件夹中, 找到所有带指定前缀的文件, 诸如 File001.txt,File002.txt 等,并定位缺失的编号(例如存在 File001.txt 和 File003.txt,但不存在File002.txt)。让该程序对所有后面的文件改名(例如File003.txt改为File002.txt),消除缺失的编号。
代码如下:
import os, re, shutil
# 找到指定文件夹中所有带指定前缀的文件
old_filenames = [x for x in os.listdir('.') if '.' in x and x.startswith('File')]
# 对文件进行排序
old_filenames.sort()
# 定位缺失的编号
numRegex = re.compile(r'^File(.*?).txt$')
for old_filename in old_filenames:
t_name_re = numRegex.search(old_filename)
# 例如在第19位,就应该叫019
t_i = '%03d' % (old_filenames.index(old_filename) +1)
# 如果index和名字中的编号不同,就对文件改名
if t_name_re.group(1) != t_i:
new_filename = old_filename.replace(t_name_re.group(1), t_i)
shutil.move(old_filename, new_filename)
思路:
- 先根据已有的文件,做成列表。
- 遍历这个列表,第1个文件的编号应该是001,第2个的编号应该是002 ...
- 如果第3个文件的编号不是003,就改成003
借鉴了两位博主的答案,自己想了一个能简单实现的办法,但是感觉有漏洞。。。
感谢@patrick1989 验证指出,这段代码在他的电脑上运行后文件名不是预期的那样,我们写了一个日志版的查看到错误来源于原文件的排序不一样,顺序不一样的话index也就不一样,也许每个人的电脑对文件的排序方式不一样,所以需要加上一行排序的代码。
old_filenames.sort()