python批量重命名文件
程序将’文件’文件夹下的所有文件重命名。
实现代码:
# 1.获取满足条件的数据
from openpyxl import load_workbook
wb = load_workbook("每月物料表.xlsx")
data = {} # 储存所有工作表中满足条件的数据,以工作表名称为键
sheet_names = wb.sheetnames
for sheet_name in sheet_names:
ws = wb[sheet_name]
qty_list = []
# 获取G列的数据,并用enumrate给其对应的元素编号
for row in range(2, ws.max_row + 1):
qty = ws['G' + str(row)].value
qty_list.append(qty)
# print(qty_list)
qty_idx = list(enumerate(qty_list)) # 用于编号
# 判断数据是否大于1000,然后返回大于1000的数据所对应的行数
row_idx = [] # 用于储存数量大于1000所对应的的行号
for i in range(len(qty_idx)):
if qty_idx[i][1] > 1000:
row_idx.append(qty_idx[i][0] + 2)
# print(row_idx)
# 获取满足条件的数据
data_morethan1K = []
for i in row_idx:
data_morethan1K.append(ws['A' + str(i) + ":" + 'I' + str(i)])
# print(data_morethan1K)
data[sheet_name] = data_morethan1K
# 2.写入获取的数据
from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment
thin = Side(border_style="thin", color="000000") # 定义边框粗细及颜色
wb = load_workbook("模板.xlsx")
ws = wb.active
for month in data.keys():
ws_new = wb.copy_worksheet(ws) # 复制模板中的工作表
ws_new.title = month
print(ws_new.title)
# 将每个月的数据条数逐个取出并写入新的工作表
for i in range(len(data[month])): # 按数据行数计数,每行数据对应9列,所以每行需分别写入9个单元格
ws_new.cell(row=i + 2, column=1).value = data[month][i][0][0].value
ws_new.cell(row=i + 2, column=2).value = data[month][i][0][1].value
ws_new.cell(row=i + 2, column=3).value = data[month][i][0][2].value
ws_new.cell(row=i + 2, column=4).value = data[month][i][0][3].value.date()
ws_new.cell(row=i + 2, column=5).value = data[month][i][0][4].value
ws_new.cell(row=i + 2, column=6).value = data[month][i][0][5].value
ws_new.cell(row=i + 2, column=7).value = data[month][i][0][6].value
ws_new.cell(row=i + 2, column=8).value = data[month][i][0][7].value
ws_new.cell(row=i + 2, column=9).value = data[month][i][0][8].value
# 设置字号,对齐,缩小字体填充,加边框
# Font(bold=True)可加粗字体
for row_number in range(2, ws_new.max_row + 1):
for col_number in range(1, 10):
c = ws_new.cell(row=row_number, column=col_number)
c.font = Font(size=10)
c.border = Border(top=thin, left=thin, right=thin, bottom=thin)
c.alignment = Alignment(horizontal="left", vertical="center", shrink_to_fit=True)
wb.save("每月(大于1K).xlsx")
实现代码:
from openpyxl import load_workbook # 用于读取Excel中的信息
# 获取Excel表格中的数据
wb = load_workbook('查找替换.xlsx') # 读取工作簿
ws = wb.active # 读取活动工作表
data = {} # 新建字典,用于储存数据
for row in range(2, ws.max_row + 1):
chazhao = str(ws['A' + str(row)].value) # 转换成字符串,以免后续比对时出现数据类型冲突
tihuan = str(ws['B' + str(row)].value) # 转换成字符串,以免后续比对时出现数据类型冲突
data[chazhao] = tihuan # 键值对应存入字典
wb = load_workbook('原表.xlsx') # 读取目标工作簿
ws = wb.active
ID_list = [] # 新建一个列表,用于储存原表D列的信息
for row in range(2, ws.max_row + 1):
ID = ws['D' + str(row)].value # 遍历整个工作表,将D列的数据逐个存入ID变量
ID_list.append(ID) # 将读取到的结果存入列表
code = []
for i in ID_list:
if i is None: # 如果是None,则放入None占位,以保持列表的值的顺序与原表一致
code.append(None)
else:
code.append(i.split(":")[-1]) # 不是None,则按":"符号分割,并放分割后的最后一个值进入新列表code
for i in range(len(code)):
if code[i] in data:
ws.cell(row=i + 2, column=4).value = ID_list[i].split(":")[0] + ":" + data[code[i]]
wb.save('原表-替换.xlsx')
实现代码:
# 将图片按修改时间排序(这样才能与图片的描述一致),将路径存入列表,以便后面逐个插入图片时调用
import os
from PIL import Image
from docx import Document
path = "6s_pictures"
list_p = [path + "\\" + i for i in os.listdir(path)] # 获取图片的文件名,并拼接完整路径
list_p.sort(key=lambda path: os.path.getmtime(path)) # 将列表中的文件按其修改时间排序,os.path.getmtime() 函数是获取文件最后修改时间
print(list_p)
# 按比例缩小图片尺寸
for infile in list_p:
im = Image.open(infile)
(x, y) = im.size # 读取图片尺寸(像素)
x_s = 165 # 定义缩小后的标准宽度
y_s = int(y * x_s / x) # 基于标准宽度计算缩小后的高度
out = im.resize((x_s, y_s), Image.ANTIALIAS) # 改变尺寸,保持图片高品质
out.save(r"6s_pictures_new\{}".format(infile.split("\\")[-1]))
path = "6s_pictures_new"
list_p = [path + "\\" + i for i in os.listdir(path)] # 获取图片的文件名,并拼接完整路径
list_p.sort(key=lambda path: os.path.getmtime(path)) # 将列表中的文件按其修改时间排序,os.path.getmtime() 函数是获取文件最后修改时间
doc = Document("6S稽查问题模板.docx")
table = doc.tables[0] # 已确定是第一个表格,其索引是0
# 增加需要的行,以便足够填入数据
for i in range(len(list_p) - 1):
table.add_row()
# 写入数据及图片
for row in range(1, len(list_p) + 1):
# 插入图片
run = table.cell(row, 2).paragraphs[0].add_run() # 新增一个文字块
picture = run.add_picture(list_p[row - 1]) # 插入图片
doc.save("6S稽查问题.docx")
实现代码:
import matplotlib.pyplot as plt
# 定义函数来显示柱状上的数值
def autolabel(rects):
for rect in rects:
height = rect.get_height()
plt.text(rect.get_x() + rect.get_width() / 2. - 0.2, 1.03 * height, '%s' % float(height))
if __name__ == '__main__':
l1 = [75, 57, 59, 60, 60]
l2 = [68.39, 58, 54, 58, 55]
# l1 = [68.50, 53.13, 53.04, 52.64, 56.32]
# l2 = [66.31, 53.57, 50.54, 55.54, 47.72]
name = ['CNN-LSTM', 'CNN3Conv', 'CNN5Conv', 'LeNet', 'EEGNet']
total_width, n = 0.8, 2
width = total_width / n
x = [0, 1, 2, 3, 4]
plt.rc('font', family='SimHei', size=12) # 设置中文显示,否则出现乱码!
a = plt.bar(x, l1, width=width, label='Valence', fc='y')
for i in range(len(x)):
x[i] = x[i] + width
b = plt.bar(x, l2, width=width, label='Arousal', tick_label=name, fc='r')
autolabel(a)
autolabel(b)
plt.xlabel('Models')
plt.ylabel('Accuracy')
plt.title('Valence Accuracy and Arousal Accuracy')
plt.legend()
plt.show()
plt.savefig('accuracy.png')