美文网首页
实践项目:消除缺失的编号

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

作者: vendettar | 来源:发表于2018-03-25 21:00 被阅读0次

    项目要求:编写一个程序, 在一个文件夹中, 找到所有带指定前缀的文件, 诸如 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()
    

    相关文章

      网友评论

          本文标题:实践项目:消除缺失的编号

          本文链接:https://www.haomeiwen.com/subject/joykcftx.html