Python编程快速上手——让繁琐工作自动化第九章实践题

##9.8.1

import os, shutil

def beifen():
    if not os.path.isdir(beifen_mulu):
        os.makedirs(beifen_mulu)
    for foldername, subfolders, filenames in os.walk(chazhao_mulu):
        for filename in filenames:
            if filename.endswith('.%s' % wenjian_type) and foldername != beifen_mulu:
                wenjian_mulu = os.path.join(foldername, filename)
                shutil.copy(wenjian_mulu, beifen_mulu)
            else:
                continue

while True:
    chazhao_mulu = input('请输入本次查找的范围:')
    if os.path.isdir(chazhao_mulu):
        break
    else:
        print('输入的查找目录不存在!')

wenjian_type = input('请输入筛选文件副档名(如:txt):')
beifen_mulu = input('请输入文件备份路径:')
beifen()

##9.8.2

import os

def shaixuan_size():
    for foldername, subfolders, filenames in os.walk(chazhao_mulu):
        for filename in filenames:
            wenjian = os.path.join(foldername, filename)
            wenjian_size = os.path.getsize(wenjian) // 1048576
            if wenjian_size >= size:
                print(wenjian, '  ——文件大小:', wenjian_size, 'M')
            else:
                continue

while True:
    chazhao_mulu = input('请输入本次查找的目录:')
    if os.path.isdir(chazhao_mulu):
        break
    else:
        print('输入的目录不存在!')
size = float(input('请输入查找文件大小(单位:M) => '))
shaixuan_size()

##9.8.3

import os, re

wenjian_ming_bian = {}   #创建全局变量(此变量信息在下列两个函数中都需使用)

def chazhao():
    Regex = re.compile(r'('+wenjian_qianzhui+')(\d+)(\.?'+wenjian_houzhui+')')
    for a in os.listdir(chazhao_mulu):   #循环提取目录中文件名称
        mo = Regex.search(a)   #筛选是否符合本次查找类型
        if mo != None:   #判断本次筛选结果
            wenjian_ming_bian[a] = mo.group(2)   #将符合条件的文件名称及其中的数字编号以字典形式收集
        else:
            continue
    if len(wenjian_ming_bian) == 0:   #判断查找结果是否为空
        print('未查找到符合筛选条件的文件')
        os._exit(0)
    else:
        bianhao_zuida = int(max(wenjian_ming_bian.values()))   #提取字典中最大的数字编号
        list_bianhao = []
        list_bianhao_kong = []
        for c in wenjian_ming_bian.values():   #循环提取字典中数字编号
            list_bianhao.append(int(c))   #将该编号转换为整数格式(去掉前缀的‘0’),添加至一个列表中
        for i in range(1,bianhao_zuida+1):     #循环提取最大数字编号下所有编号
            if i not in list_bianhao:   #判断空缺编号
                list_bianhao_kong.append(i)   #将空缺编号添加至列表中
            else:
                continue
        if len(list_bianhao_kong) == 0:   #判断空缺编号列表内容是否为空
            print('文件名称中无空缺编号')
        else:
            print('文件名称中空缺编号为:', list_bianhao_kong)

        panduan = input('是否进行重新编码(Y/N):')   #确定是否对文件名称重新编码
        if panduan == 'Y':
            chongbian()
        else:
            os._exit(0)

def chongbian():
    while True:
        bianhao_weishu = input('请输入重新编码的位数:')
        if bianhao_weishu.isdecimal() == False or len(bianhao_weishu) == 0:   #判断输入的位数是否符合规定
            print('需为正整数 且不可为 0')
        else:
            break
    wenjian_ming_bian_2 = sorted(wenjian_ming_bian.items(), key=lambda item:item[1])   #将字典中信息按照编号大小排序,并返回为元组
    bianhao = 1
    for b in wenjian_ming_bian_2:   #循环提取元组中文件名称及其编号信息
        wenjian_new = b[0].replace(b[1], str(bianhao).rjust(int(bianhao_weishu), '0'))   #将旧名称中旧编号替换为新编号,并生成新的文件名称
        bianhao += 1
        os.rename(os.path.join(chazhao_mulu, b[0]), os.path.join(chazhao_mulu, wenjian_new))   #将旧名称文件改名为新文件名称
    print('文件名称已重新编码完毕')

while True:
    chazhao_mulu = input('请输入本次查找的目录:')
    if os.path.isdir(chazhao_mulu):
        break
    else:
        print('输入的目录不存在')
wenjian_qianzhui = input('请输入本次查找的文件前缀:')
wenjian_houzhui  = input('请输入本次查找的文件副档名:')
chazhao()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值