python批量修改文件名

python批量修改文件名

import os,re
my_dir_path=os.path.dirname(os.path.abspath(__file__))
"""
abspath 函数,返回文件的绝对路径,参数文件名
dirname 函数,返回文件的目录路径,参数是路径+文件名
"""
file_names=os.listdir(my_dir_path)
"""
listdir 函数,返回目标路径的文件名列表,参数目录路径
"""
num1=num2=0
for fname in file_names:
    num1+=1
    d=re.match(r'^\d{1,3}',fname)
    """
    re.match 函数
    尝试从一个字符串的起始位置匹配一个模式,如果不是起始
    位置匹配成功的话,则返回None
    re.match(pattern, string, flags=0)
    """
    if d:
        zimu=fname.strip(d.group())
        """
        group() 函数是获取匹配的字符串
        strip([chars]) 函数是去除字符串前面和后面的所有设置
        的字符串,模式为空格
        """
        num2+=1
        newd=str(int(d.group())-100)
        new_name=os.path.join(my_dir_path,newd)+zimu
        """
        join() 函数是路径拼接函数,自动加\或/
        """
        old_name=os.path.join(my_dir_path,fname)
        os.rename(old_name,new_name)
        """
        rename(old_name,new_name) 函数是把旧名字改成新名字
        参数可以不带路径,可以绝对路径,可以相对路径
        """
    else:
        print(f'此文件前面没有序号:{fname}')
print(f'共{num1}个文件,成功改名{num2}个文件!')

python操作excel小程序

import os,re
from openpyxl import load_workbook,Workbook
# 首先加载需要用到的模块

newfile = Workbook()
newsheet = newfile.active
# 创建一个新xlsx文件,并获取当前sheet对象

newsheet.cell(row=1, column=1).value='名称'
newsheet.cell(row=1, column=2).value='光缆长度'
newsheet.cell(row=1, column=3).value='加挂长度'
newsheet.cell(row=1, column=4).value='管道长度'
newsheet.cell(row=1, column=5).value='钉固长度'
# 在新文件上创建1行5列的标题

my_dir_path = os.path.dirname(os.path.abspath(__file__))
# 获取本文件的绝对路径,所以要把本文件放在
# 和目标文件同一个文件夹

file_names = os.listdir(my_dir_path)
# 获取该路径下的所有文件名和文件夹名

zong = ok = 0
# 总文件数 执行成功的文件数

for fname in file_names:
    zong += 1
    pnum = re.search('^\d{1,3}',fname)
    # 获取文件名字前面的最多3位数字
   
    if pnum:
        num = pnum.group()
        print(num)
        pfilename = re.search(r'(?<='+str(num)+r'-).*(?=\.xlsx)',fname)
        # 获取除了文件名前面的数字、“-”、后缀名。
        
        if pfilename:
            filename = pfilename.group()
            print(filename)
            ok += 1
            newsheet.cell(row=int(num)+1, column=1).value=filename
            # 在新文件的第X行第一列填入文件名 X=获取的文件名前的数字
            
            wb = load_workbook(fname,data_only=True)
            ws = wb['表三甲']
            # 打开一个文件名为X的文件 X=新文件填入的那个文件名
            
            liang = [0,0,0,0,0]
            # 用于保存找到的数据的容器
            
            for thisrow in range(1,ws.max_row+1):
                # for thiscolumn in range(1,ws.max_column+1):
                if re.search(r'TXL1-001',str(ws.cell(thisrow,2).value)) :
                    liang[1] = ws.cell(thisrow,5).value # liang[1]存直埋的量
                elif re.search(r'TXL1-002',str(ws.cell(thisrow,2).value)) :
                    liang[2] = ws.cell(thisrow,5).value # liang[2]存架空的量
                elif re.search(r'TXL1-003',str(ws.cell(thisrow,2).value)) :
                    liang[3] = ws.cell(thisrow,5).value # liang[3]存管道的量
                elif re.search(r'TXL4-054',str(ws.cell(thisrow,2).value)) :
                    liang[4] = ws.cell(thisrow,5).value # liang[4]存钉固的量
            # 搜索第一列的所有行,找到的数据保存到容器里
            
            if liang[1] :
                newsheet.cell(row=int(num)+1, column=2).value=str(round(liang[1]+liang[2]+liang[3],2))+'(埋'+str(liang[1])+')'
                newsheet.cell(row=int(num)+1, column=3).value=liang[2]-liang[4]
                newsheet.cell(row=int(num)+1, column=4).value=liang[3]
                newsheet.cell(row=int(num)+1, column=5).value=liang[4]
            else:
                newsheet.cell(row=int(num)+1, column=2).value=str(round(liang[2]+liang[3]))
                newsheet.cell(row=int(num)+1, column=3).value=liang[2]-liang[4]
                newsheet.cell(row=int(num)+1, column=4).value=liang[3]
                newsheet.cell(row=int(num)+1, column=5).value=liang[4]
            # 从容器里取得数据并计算后,写入新文件
            
myf = 'my.xlsx'
newfile.save(myf)
# 保存文件

print(f'总文件{zong}个,成功{ok}个。生成的{myf}文件保存在{my_dir_path}里。')
# 打印一些有用信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值