python编程快速上手之第9章实践项目

9.8.3 消除缺失的编号

编写思路

  • 利用正则表达式提取出文件名中的编号,与对应的文件名构成键值对,创建字典
  • 搜索缺失的文件编号,将当前最大文件编号对应的文件名修改为缺失文件编号对应的文件名
import os
import re
import shutil

def eliminate_missing_numbers(prefix, suffix, path):
    """
    在指定文件夹中,找到所有带指定前缀的文件,诸如spam001.txt, spma002.txt等,
    并定位缺失的编号(例如存在spam001.txt和spam003.txt,但不存在spam002.txt)。
    该程序对所有后面的文件改名,消除缺失的编号

    :param prefix: 文件前缀
    :param suffix: 文件后缀
    :param path: 文件所在路径
    :return:
    """

    if not os.path.isabs(path):
        os.path.abspath(path)  # 将路径参数转换为绝对路径

    fileRegex = re.compile('^' + prefix + r'(\d+)' + suffix + '$')  # 创建正则表达式用于提取文件名中的编号

    dictNameNum = {}  # 创建字典
    print('原始文件清单:')
    for fileName in os.listdir(path):
        mo = fileRegex.search(fileName)  # 搜索匹配的文件名
        if mo is not None:
            dictNameNum[int(mo.group(1))] = fileName  # 提取文件编号作为关键字,文件名为对应的值
            print(fileName)

    print('\n开始扫描缺失的文件编号...')
    # 循环遍历文件编号,找到缺失的文件编号,将当前最后一个文件编号对应的文件名修改为缺失的文件编号对应的文件名
    index = 1
    maxNumber = max(dictNameNum.keys())
    width = len(str(maxNumber))
    while index < maxNumber:
        if index not in dictNameNum.keys():  # 找到缺失的文件编号
            print(f'缺少文件编号:{str(index).rjust(width, "0")}')
            fileNameNew = prefix + str(index).rjust(width, '0') + suffix # 定义新文件名
            print(f'正在将 {dictNameNum[maxNumber]} 重命名为 {fileNameNew} ...')
            shutil.move(os.path.join(path, dictNameNum[maxNumber]), os.path.join(path, fileNameNew))  # 修改文件名称
            dictNameNum[index] = fileNameNew  # 增加缺失的文件编号
            del dictNameNum[maxNumber]  # 删除已改名的文件编号
            maxNumber = max(dictNameNum.keys())  # 重新计算当前最大文件编号
        index += 1

    print('缺少的文件编号已全部处理完毕!')
    print('\n打印处理后的文件清单:')
    for index in range(maxNumber):
        print(dictNameNum[index + 1])

eliminate_missing_numbers('capitalsquiz', '.txt', 'quizGenerator')

程序运行结果

利用第八章生成的随机测验试卷文件作为测试文件,运行结果如下:

原始文件清单:
capitalsquiz01.txt
capitalsquiz03.txt
capitalsquiz04.txt
capitalsquiz05.txt
capitalsquiz06.txt
capitalsquiz08.txt
capitalsquiz09.txt
capitalsquiz10.txt
capitalsquiz12.txt
capitalsquiz13.txt
capitalsquiz14.txt
capitalsquiz15.txt
capitalsquiz16.txt
capitalsquiz18.txt
capitalsquiz19.txt
capitalsquiz20.txt
capitalsquiz21.txt
capitalsquiz22.txt
capitalsquiz23.txt
capitalsquiz25.txt
capitalsquiz26.txt
capitalsquiz27.txt
capitalsquiz28.txt
capitalsquiz29.txt
capitalsquiz30.txt
capitalsquiz31.txt
capitalsquiz32.txt
capitalsquiz34.txt
capitalsquiz35.txt

开始扫描缺失的文件编号...
缺少文件编号:02
正在将 capitalsquiz35.txt 重命名为 capitalsquiz02.txt ...
缺少文件编号:07
正在将 capitalsquiz34.txt 重命名为 capitalsquiz07.txt ...
缺少文件编号:11
正在将 capitalsquiz32.txt 重命名为 capitalsquiz11.txt ...
缺少文件编号:17
正在将 capitalsquiz31.txt 重命名为 capitalsquiz17.txt ...
缺少文件编号:24
正在将 capitalsquiz30.txt 重命名为 capitalsquiz24.txt ...
缺少的文件编号已全部处理完毕!

打印处理后的文件清单:
capitalsquiz01.txt
capitalsquiz02.txt
capitalsquiz03.txt
capitalsquiz04.txt
capitalsquiz05.txt
capitalsquiz06.txt
capitalsquiz07.txt
capitalsquiz08.txt
capitalsquiz09.txt
capitalsquiz10.txt
capitalsquiz11.txt
capitalsquiz12.txt
capitalsquiz13.txt
capitalsquiz14.txt
capitalsquiz15.txt
capitalsquiz16.txt
capitalsquiz17.txt
capitalsquiz18.txt
capitalsquiz19.txt
capitalsquiz20.txt
capitalsquiz21.txt
capitalsquiz22.txt
capitalsquiz23.txt
capitalsquiz24.txt
capitalsquiz25.txt
capitalsquiz26.txt
capitalsquiz27.txt
capitalsquiz28.txt
capitalsquiz29.txt

Process finished with exit code 0

原文地址:https://www.cnblogs.com/simonxu0559/p/11782486.html

时间: 2024-10-12 05:59:29

python编程快速上手之第9章实践项目的相关文章

python编程快速上手之第8章实践项目参考答案

第8章实践项目之疯狂填词 创建一个一个疯狂填词(Mad Libs),程序,它将读入文本文件,并让用户在该文本文件中出现 ADJECTIVE,NOUN,VERB等单词的地方,加上他们自己的文本. 首先准备一个a.txt的文本文件 程序代码如下: #!/usr/bin/env python3.4 # coding:utf-8 # 8.9.2 import re f1 = open('a.txt','r') strf1 = f1.read() print("原文件内容为:") print(s

python编程快速上手之第10章实践项目参考答案

  本章主要讲了python程序的调试,当程序有BUG或异常的时候,我们如何调试代码找出问题点.其实在本章之前的章节我们做练习的时候都会遇到各种各样的错语和异常,最初当不知道程序哪里出错的情况下不可否认的都使用了print语句进行输出并调试代码.没错print也是调试代码的一种工具,直观简单,便也有缺点,就是调试好后要进行删除,也是件麻烦事,于是就有了本章介绍的assert(断言),logging(日志)以及各种调试工具的出现. 首先来回顾一下python的异常. 一.python常见的异常类型

python编程快速上手之第10章实践项目参考答案(11.11.2)

#!/usr/bin/env python # -*- coding:utf-8 -*- import os import re import urllib import json import socket import urllib.request import urllib.parse import urllib.error # 设置超时 import time timeout = 5 socket.setdefaulttimeout(timeout) class Crawler: # 睡

python编程快速上手之第3章实践项目参考答案

1 #!/usr/bin/env python 2 # coding:utf-8 3 # write by mfyang 4 # collatz.py 5 # 从用户读入一个值,并判断这个值是不是一个int类型的整数,如果不是给出异常提示 6 # 如果这个值是偶数 那么让这个数//2 7 # 如果这个值是奇数 那么让这个数 ×3 + 1 8 # 通过不断调用函数的返回值 并打印这个返回值 直到这个返回值为1 9 10 num = raw_input("please input a number:

python编程快速上手之第18章实践项目参考答案(18.4.1)

import pyautogui, time print('Press Ctrl-C to quit.') try: while True: time.sleep(10) pyautogui.moveRel(1, 0, duration=0.25) time.sleep(10) pyautogui.moveRel(-1, 0, duration=0.25) except KeyboardInterrupt: print('\nDone.')

python编程快速上手之第15章实践项目参考答案(17.7.1)

#! python3 # resizeAndAddLogo.py - Resizes all images in current working directory to fit # in a 300x300 square, and adds catlogo.png to the lower-right corner. import os from PIL import Image os.chdir('C:\\Users\\Administrator\\Python35-32\\test\\ku

python编程快速上手之第13章实践项目参考答案(13.6.1)

import os,PyPDF2 os.chdir('D:\\My Documents') for folderName, subfolders, filenames in os.walk('D:\\My Documents'): for file in filenames: if file.endswith('.pdf'): pdfFile = open(file, 'rb') pdfReader = PyPDF2.PdfFileReader(pdfFile) pdfWriter = PyPD

python编程快速上手之第15章实践项目参考答案(17.7.2)

#! python3 # Import modules and write comments to describe this program. import zipfile, os from PIL import Image from PIL import ImageFile #os.chdir('D:\\My Documents\\') ImageFile.LOAD_TRUNCATED_IMAGES = True for foldername, subfolders, filenames i

python编程快速上手之第12章实践项目参考答案(12.13.3)

1 #! python3 2 import openpyxl,os,glob 3 os.chdir('C:\\Users\\Administrator\\Python35-32') 4 list=glob.glob('*.txt') 5 print(list) 6 wb = openpyxl.Workbook() 7 sheet = wb.get_active_sheet() 8 columnNum=0 9 for fliename in list: 10 file_object = open(

python编程快速上手之第10章实践项目参考答案(11.11.3)

from selenium import webdriver from selenium.webdriver.common.keys import Keys import time browser = webdriver.Firefox() url = 'https://gabrielecirulli.github.io/2048/' browser.get(url) game_ele = browser.find_element_by_class_name('game-container')