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}里。')
# 打印一些有用信息