##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()