实践项目:消除缺失的编号

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. 先根据已有的文件,做成列表。
  2. 遍历这个列表,第1个文件的编号应该是001,第2个的编号应该是002 ...
  3. 如果第3个文件的编号不是003,就改成003

借鉴了两位博主的答案,自己想了一个能简单实现的办法,但是感觉有漏洞。。。

感谢@patrick1989 验证指出,这段代码在他的电脑上运行后文件名不是预期的那样,我们写了一个日志版的查看到错误来源于原文件的排序不一样,顺序不一样的话index也就不一样,也许每个人的电脑对文件的排序方式不一样,所以需要加上一行排序的代码。

old_filenames.sort()
上一篇下一篇

猜你喜欢

热点阅读