场景:整理一批文件,发现文件命名不够规范,想要重新命名,但文件很多,人工操作,过程繁复,这时候就可以使用程序来代替人工处理了。
实现效果:
其中,新文件名可根据我们想要的命名规范自行输入表格,然后由程序提取新文件名并自动批量冲命名文件。
代码如下:
#!user/bin/python3
# _*_ coding:utf-8 _*_
# author TingXiao-UI
import os
import xlsxwriter as xw
import xlrd#只读excel
#提取文件名到表格
def getName(rp):
print("开始提取文件名!")
# 创建excel
xlsxName ='批量命名.xlsx'
workbook = xw.Workbook(xlsxName)
sheet1 = workbook.add_worksheet('sheet1')
row_0 = ['ID','旧文件名','新文件名']
sheet1.write_row('A1', row_0)
#遍历文档,批量提取文件名并写入到表格
m = 0
for root,dirs,files in os.walk(rp+'\\文件'):
for file in files:
curName = os.path.join(file)
# curPath = os.path.join(root,file)
m += 1
# 序号
sheet1.write(m,0,m)
# 旧文件名
sheet1.write(m,1,curName)
# 新文件名
workbook.close()#关闭excel后台运行
print("文件名提取完毕!")
#批量重命名
def reName(rp):
# 打开文档
xlsxName = '批量命名.xlsx'
file = xlrd.open_workbook(rp+'\\'+xlsxName) # xlrd模块
sheet1 = file.sheet_by_index(0)
rows = sheet1.nrows#获取行数
# sheet1.row_values(0, 6, 10) # 取第1行,第6~10列(不含第10表)
# sheet1.col_values(0, 0, 5) # 取第1列,第0~5行(不含第5行)
# sheet1.row_slice(2, 0, 2) # 获取单元格值类型和内容
# sheet1.row_types(1, 0, 2) # 获取单元格数据类型
oldNames = sheet1.col_values(1,1,rows+1)#取第1列,第0~rows+1行(不含第rows+1行)
newNames = sheet1.col_values(2,1,rows+1)#取第2列,第0~rows+1行(不含第rows+1行)
#遍历文档,批量重命名
for root,dirs,files in os.walk(rp+'\\文件'):
for file in files:
curName = os.path.join(file)
curPath = os.path.join(root,file)
id = oldNames.index(curName)#获取索引
newname = newNames[id]
newPath = os.path.join(root,newname)
# 新文件名
os.rename(curPath, newPath) # 用os模块中的rename方法对文件改名
if __name__=='__main__':
rootPath = os.getcwd()#获取当前文件路径
# getName(rootPath)#提取文件名
reName(rootPath)#批量重命名
批量创建文件夹也简单,实现效果如下所示
?代码如下:
#!user/bin/python3
# _*_ coding:utf-8 _*_
# author TingXiao-UI
import os
import xlsxwriter as xw
import xlrd#只读excel
#提取文件名到表格
def getName(rp):
print("开始提取文件名!")
# 创建excel
xlsxName ='批量命名.xlsx'
workbook = xw.Workbook(xlsxName)
sheet1 = workbook.add_worksheet('sheet1')
row_0 = ['ID','旧文件名','新文件名']
sheet1.write_row('A1', row_0)
#遍历文档,批量提取文件名并写入到表格
m = 0
for root,dirs,files in os.walk(rp+'\\文件'):
for file in files:
curName = os.path.join(file)
# curPath = os.path.join(root,file)
m += 1
# 序号
sheet1.write(m,0,m)
# 旧文件名
sheet1.write(m,1,curName)
# 新文件名
workbook.close()#关闭excel后台运行
print("文件名提取完毕!")
#批量创建文件夹
def createFolder(rp,name):
# 打开文档
xlsxName = name
file = xlrd.open_workbook(rp+'\\'+xlsxName) # xlrd模块
sheet1 = file.sheet_by_index(0)
rows = sheet1.nrows#获取行数
# sheet1.row_values(0, 6, 10) # 取第1行,第6~10列(不含第10表)
# sheet1.col_values(0, 0, 5) # 取第1列,第0~5行(不含第5行)
# sheet1.row_slice(2, 0, 2) # 获取单元格值类型和内容
# sheet1.row_types(1, 0, 2) # 获取单元格数据类型
folderNames = sheet1.col_values(0,1,rows+1)#取第1列,第2~rows+1行(不含第rows+1行)
if len(folderNames)>1:
#批量创建合并文件夹
for folder in folderNames:
curPath = rp+'\\'+folder
if os.path.exists(curPath) is False:
os.mkdir(curPath)
if __name__=='__main__':
rootPath = os.getcwd()#获取当前文件路径
xlsxName = '文件夹.xlsx'
createFolder(rootPath,xlsxName)##批量创建文件夹
|