玩转openpyxl,用python制作一个公司租车记录登记表!
1. 需求来源
我们公司属于国企,报销流程相比一般公司比较复杂,不仅要贴发票还要登记。贴发票的事情,计算机派不上用场,但是做登记表,可以用上Python帮忙。所以,我花了一段时间,鼓捣出了一个租车信息登记表生成程序。
公司的租车登记表有固定模板,且格式较复杂,具体式样如下:
于是我做了一个小程序,自己只需输入相关信息,然后程序就根据格式自动生成租车登记表。
2. 思路
首先,使用openpyxl创建一个工作表文件,并按照要求把各部分固定格式的表头制作完成。
再使用input语句要求用户自己登记相关数据,有多条数据时,使用while循环多次写入,最后使用公式自动统计完成,保存表格。
首次创建登记表时,会要求输入部门、统计区间信息,再次读取该文件时,则不需要。
再次使用时此程序时,程序检测到程序所在文件夹有与上次保存工作表同名文件时,直接读取文件,并添加数据。
3. 详解
- 此次用到的模块
openpyxl:操作并编辑excel文件
datetime:获取此刻时间
os:操作文件
- 样式
首先根据对文件分析,会使用到3种字体格式,3种对齐格式,2种边框样式,所以预先写好待用。
# 设置单元格文字、单元格、单元格框线样式
fontText1 = Font(name='宋体', size=14, bold=True)
fontText2 = Font(name='宋体', size=10, bold=True)
fontText3 = Font(name='宋体', size=10, bold=False)
AlignmentText1 = Alignment(horizontal='center', vertical='center', wrap_text=True)
AlignmentText2 = Alignment(horizontal='center', vertical='center')
AlignmentText3 = Alignment(vertical='center')
AlignmentText4 = Alignment(vertical='center', wrap_text=True)
border1 = Border(left=Side(border_style='thin', color='000000'), right=Side(border_style='thin', color='000000'),top=Side(border_style='thin', color='000000'), bottom=Side(border_style='thin', color='000000'))
border2 = Border(left=Side(border_style='thin', color='FFFFFF'), right=Side(border_style='thin', color='FFFFFF'),top=Side(border_style='thin', color='FFFFFF'), bottom=Side(border_style='thin', color='FFFFFF'))
- 日期
获取此刻时间,实际上这里我投了个懒,直接把本月时间取到然后填入,起始到结束时间默认规定为1-30日,其实这个参数最好要可选,比较麻烦就没写了,有感兴趣的大佬可以评论区补充,谢谢。
# 获取日期--待写
# Y=input("请输入年份")
# m=input("请输入月份")
now = datetime.datetime.now()
now.strftime('%Y %m %d')
- 写入并格式化表头
写入表头,设置好单元格合并。录入部门、车牌号、统计区间等信息。比较重复性的工作,封装到函数里面。没什么好说的。看代码:
def write_title():# 获取基本参数bm = input('部门:')cph = input('请输入车牌号:粤')# 处理默认标题单元格drive_sheet['A1'] = 'XXXX因公使用车辆登记表'drive_sheet['A1'].font = fontText1drive_sheet['A1'].alignment = AlignmentText1drive_sheet.merge_cells('A1:M1')drive_sheet.merge_cells('A2:M2')drive_sheet['A3'] = '部门:'+bmdrive_sheet['A3'].font = fontText2drive_sheet['A3'].alignment = AlignmentText4drive_sheet.merge_cells('A3:B3')drive_sheet['C3'] = '车牌号:粤'+cphdrive_sheet['C3'].font = fontText2drive_sheet['C3'].alignment = AlignmentText1drive_sheet.merge_cells('C3:F3')drive_sheet['H3'] = '统计期间:'+(now.strftime('%Y'))+'年'+(now.strftime('%m')) + \'月'+'1日-'+(now.strftime('%Y'))+'年'+(now.strftime('%m'))+'月'+'30日'drive_sheet['H3'].alignment = AlignmentText2drive_sheet['H3'].font = fontText3drive_sheet.merge_cells('H3:L3')drive_sheet['A4'].font = fontText2drive_sheet['A4'].alignment = AlignmentText1drive_sheet['A4'] = '出车日期'drive_sheet.merge_cells('A4:A5')drive_sheet['B4'].font = fontText2drive_sheet['B4'].alignment = AlignmentText1drive_sheet['B4'] = '使用人'drive_sheet.merge_cells('B4:B5')drive_sheet['C4'].font = fontText2drive_sheet['C4'].alignment = AlignmentText1drive_sheet['C4'] = '起点'drive_sheet.merge_cells('C4:C5')drive_sheet['D4'].font = fontText2drive_sheet['D4'].alignment = AlignmentText1drive_sheet['D4'] = '目的地(途径)'drive_sheet.merge_cells('D4:D5')drive_sheet['E4'].font = fontText2drive_sheet['E4'].alignment = AlignmentText1drive_sheet['E4'] = '里程表(起点读数)'drive_sheet.merge_cells('E4:E5')drive_sheet['F4'].font = fontText2drive_sheet['F4'].alignment = AlignmentText1drive_sheet['F4'] = '里程表(结束读数)'drive_sheet.merge_cells('F4:F5')drive_sheet['G4'].font = fontText2drive_sheet['G4'].alignment = AlignmentText1drive_sheet['G4'] = '事由'drive_sheet.merge_cells('G4:G5')drive_sheet['H4'].font = fontText2drive_sheet['H4'].alignment = AlignmentText1drive_sheet['H4'] = '本次出行发生车辆费用明细'drive_sheet.merge_cells('H4:M4')drive_sheet['H5'].font = fontText2drive_sheet['H5'].alignment = AlignmentText1drive_sheet['H5'] = '油费'drive_sheet['I5'].font = fontText2drive_sheet['I5'].alignment = AlignmentText1drive_sheet['I5'] = '路桥费'drive_sheet['J5'].font = fontText2drive_sheet['J5'].alignment = AlignmentText1drive_sheet['J5'] = '停车费'drive_sheet['K5'].font = fontText2drive_sheet['K5'].alignment = AlignmentText1drive_sheet['K5'] = '维修保养'drive_sheet['L5'].font = fontText2drive_sheet['L5'].alignment = AlignmentText1drive_sheet['L5'] = '其他费用(租车费)'drive_sheet['M5'].font = fontText2drive_sheet['M5'].alignment = AlignmentText1drive_sheet['M5'] = '费用合计'print('基本信息已填写完毕,请输入行程信息')
- 设置主要单元格尺寸
使用参数设置好主要单元格高度和宽度,并封装到函数,见代码:
# 行高和列宽设置def row_height():drive_sheet.row_dimensions[1].height = 20drive_sheet.row_dimensions[3].height = 35.25drive_sheet.row_dimensions[5].height = 36drive_sheet.column_dimensions['A'].width = 8drive_sheet.column_dimensions['B'].width = 10.63drive_sheet.column_dimensions['C'].width = 16.63drive_sheet.column_dimensions['D'].width = 16.75drive_sheet.column_dimensions['E'].width = 10.5drive_sheet.column_dimensions['F'].width = 10.5drive_sheet.column_dimensions['G'].width = 9.5
- 输入行程数据
要求用户输入基本行程数据,数据最后行的合计用赋值语句直接计算。
# 输入行程基本信息def fill_chart():ycrq = input('用车日期(m月n日):')driver = input('用车人:')qd = input('起点:')goal = input('目的地及途经点:')lcb_s = input('里程表起点读数:')lcb_e = input('里程表终点读数:')res = input('事由:')oil = input('加油费(元):')cross = input('路桥费(元):')park = input('停车费(元):')repair = input('维修保养(元):')zc = input('其他(租车费)(元):')fyzj = float(oil)+float(cross)+float(park)+float(repair)+float(zc)drive_sheet.append([ycrq, driver, qd, goal, float(lcb_s), float(lcb_e),res, float(oil), float(cross), float(park), float(repair), float(zc), fyzj])
- 连续添加数据
这里使用while循环,让用户选择,是否继续添加数据 。
def contiune_fill():judge = input("是否继续添加租车信息?请选择(Y(是的,继续)/N(否,结束)):")while judge == 'Y':fill_chart()judge = input("是否继续添加租车信息?请选择(Y(是的,继续)/N(否,结束)):")if judge == 'N':break
- 数据统计
数据输入完成后,对每一列进行求和,由于行数不确定,这里使用变量row(表格总行数,不包括后门部门签字及注意行),与列名进行拼接,然后写入公式求和。
# 统计行数据def count_data():drive_sheet['A%s' % (row+1)] = '合计'drive_sheet['H%s' % (row+1)] = '=sum(H6:H%s)' % (row)drive_sheet['I%s' % (row+1)] = '=sum(I6:I%s)' % (row)drive_sheet['J%s' % (row+1)] = '=sum(J6:J%s)' % (row)drive_sheet['K%s' % (row+1)] = '=sum(K6:K%s)' % (row)drive_sheet['L%s' % (row+1)] = '=sum(L6:L%s)' % (row)drive_sheet['M%s' % (row+1)] = '=sum(M6:M%s)' % (row)
- 写入部门签字及注意行
所有数据录入完成后,在末尾写入部门签字及注意行,并设置好单元格合并。
def write_end():drive_sheet['A%s' % (row+2)] = '制表:'drive_sheet['C%s' % (row+2)] = '用车部门负责人确认:'drive_sheet.merge_cells('C%d:D%s' % (row+2, row+2))drive_sheet['E%s' % (row+2)] = '初核:'drive_sheet.merge_cells('E%d:F%s' % (row+2, row+2))drive_sheet['H%s' % (row+2)] = '复核:'drive_sheet.merge_cells('H%d:I%s' % (row+2, row+2))drive_sheet['J%s' % (row+2)] = '综合管理部负责人确认:'drive_sheet.merge_cells('J%s:L%s' % (row+2, row+2))# 注意行drive_sheet['A%s' % (row+4)] = '注:1、请各部门按照上表要求严格登记每次出车的相关信息,不得缺项。'drive_sheet['A%s' % (row+5)] = ' 2、上表需按照每一辆车一张表的形式进行统计。'drive_sheet['A%s' % (row+6)] = ' 3、上表至少按月度进行统计,并在报销相关车辆费用的时候作为附件提交。'drive_sheet['A%s' % (row+7)] = ' 4、本表统计范围仅包括公司自有车辆及以公司名义对外租赁使用的车辆。'drive_sheet['A%s' % (row+8)] = ' 5、本表必须由部门负责人签字确认。'for f in range(row+4, row+8):drive_sheet.merge_cells('A%d:F%s' % (f, f))
- 整理格式
最后整理好所有部分格式:
# 最后几行格式def last_alignment():# 设置最后几行文字格式col0 = drive_sheet['A%d:M%s' % (row+1, row+8)]for ce0 in col0:for cel0 in ce0:cel0.font = fontText3col4 = drive_sheet['A%d:J%s' % (row+2, row+8)]for ce4 in col4:for cel4 in ce4:cel4.font = fontText3cel4.alignment = AlignmentText3drive_sheet['E%d' % (row+2)].alignment = AlignmentText2# 所有单元格设置黑色框线col1 = drive_sheet['A4:M%s' % (row+1)]for ce1 in col1:for cel1 in ce1:cel1.border = border1# 所有数据单元格设置字体格式col2 = drive_sheet['A5:M%s' % (row+1)]for ce2 in col2:for cel2 in ce2:cel2.font = fontText3cel2.alignment = AlignmentText1
- 主函数
先放代码:
if os.path.exists('临时租车行驶登记表test.xlsx'):filepath = '临时租车行驶登记表test.xlsx'drive_list = openpyxl.load_workbook(filepath)drive_sheet = drive_list.active# 获取初始行数row0 = drive_sheet.max_row# 取消合计及注意部分单元格的合并drive_sheet.unmerge_cells('C%d:D%s' % (row0-6, row0-6))drive_sheet.unmerge_cells('E%d:F%s' % (row0-6, row0-6))drive_sheet.unmerge_cells('H%d:I%s' % (row0-6, row0-6))drive_sheet.unmerge_cells('J%s:L%s' % (row0-6, row0-6))for s in range(row0-4, row0):drive_sheet.unmerge_cells('A%d:F%s' % (s, s))# 删除多余单元格drive_sheet.delete_rows(row0-7, row0)fill_chart()contiune_fill()# # 获取行数row = drive_sheet.max_rowcount_data()write_end()last_alignment()else:drive_list = Workbook()drive_sheet = drive_list.activedrive_sheet.sheet_view.showGridLines = Falsedrive_sheet.border = border2write_title()row_height()fill_chart()contiune_fill()# 获取行数row = drive_sheet.max_rowcount_data()write_end()last_alignment()
首先判断是否存在已登记过的登记表,如果不存在,直接新建excel文件→取消网格线显示→设置好网格线实线显示区域→然后输入基本信息→写入表头→设置好单元格尺寸→填入数据,如果有需要,继续填入→此时,获取表格行数→统计每列费用总计→写入审批签字、注意等部分→设置好所有格式。(见else后面代码)
如果文件已存在,则获取表格所有行参数row0,删除合计及审批签字、注意等行(由于append函数添加数据方便,但只能在表格最后添加,所以此处先删除数据后门部分)→填入数据,如果有需要,继续填入→此时,再次获取含所有数据的表格行数→统计每列费用总计→写入审批签字、注意等部分→设置好所有格式。(见if后面代码)
- 保存文件
详情见所有代码
所有代码:
import openpyxl
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, Border, Side
import datetime
import os# 设置单元格文字、单元格、单元格框线样式
fontText1 = Font(name='宋体', size=14, bold=True)
fontText2 = Font(name='宋体', size=10, bold=True)
fontText3 = Font(name='宋体', size=10, bold=False)
AlignmentText1 = Alignment(horizontal='center', vertical='center', wrap_text=True)
AlignmentText2 = Alignment(horizontal='center', vertical='center')
AlignmentText3 = Alignment(vertical='center')
AlignmentText4 = Alignment(vertical='center', wrap_text=True)
border1 = Border(left=Side(border_style='thin', color='000000'), right=Side(border_style='thin', color='000000'),top=Side(border_style='thin', color='000000'), bottom=Side(border_style='thin', color='000000'))
border2 = Border(left=Side(border_style='thin', color='FFFFFF'), right=Side(border_style='thin', color='FFFFFF'),top=Side(border_style='thin', color='FFFFFF'), bottom=Side(border_style='thin', color='FFFFFF'))# 获取日期--待写
# Y=input("请输入年份")
# m=input("请输入月份")
now = datetime.datetime.now()
now.strftime('%Y %m %d')# 填写并格式化表头
def write_title():# 获取基本参数bm = input('部门:')cph = input('请输入车牌号:粤')# 处理默认标题单元格drive_sheet['A1'] = 'XXXX因公使用车辆登记表'drive_sheet['A1'].font = fontText1drive_sheet['A1'].alignment = AlignmentText1drive_sheet.merge_cells('A1:M1')drive_sheet.merge_cells('A2:M2')drive_sheet['A3'] = '部门:'+bmdrive_sheet['A3'].font = fontText2drive_sheet['A3'].alignment = AlignmentText4drive_sheet.merge_cells('A3:B3')drive_sheet['C3'] = '车牌号:粤'+cphdrive_sheet['C3'].font = fontText2drive_sheet['C3'].alignment = AlignmentText1drive_sheet.merge_cells('C3:F3')drive_sheet['H3'] = '统计期间:'+(now.strftime('%Y'))+'年'+(now.strftime('%m')) + \'月'+'1日-'+(now.strftime('%Y'))+'年'+(now.strftime('%m'))+'月'+'30日'drive_sheet['H3'].alignment = AlignmentText2drive_sheet['H3'].font = fontText3drive_sheet.merge_cells('H3:L3')drive_sheet['A4'].font = fontText2drive_sheet['A4'].alignment = AlignmentText1drive_sheet['A4'] = '出车日期'drive_sheet.merge_cells('A4:A5')drive_sheet['B4'].font = fontText2drive_sheet['B4'].alignment = AlignmentText1drive_sheet['B4'] = '使用人'drive_sheet.merge_cells('B4:B5')drive_sheet['C4'].font = fontText2drive_sheet['C4'].alignment = AlignmentText1drive_sheet['C4'] = '起点'drive_sheet.merge_cells('C4:C5')drive_sheet['D4'].font = fontText2drive_sheet['D4'].alignment = AlignmentText1drive_sheet['D4'] = '目的地(途径)'drive_sheet.merge_cells('D4:D5')drive_sheet['E4'].font = fontText2drive_sheet['E4'].alignment = AlignmentText1drive_sheet['E4'] = '里程表(起点读数)'drive_sheet.merge_cells('E4:E5')drive_sheet['F4'].font = fontText2drive_sheet['F4'].alignment = AlignmentText1drive_sheet['F4'] = '里程表(结束读数)'drive_sheet.merge_cells('F4:F5')drive_sheet['G4'].font = fontText2drive_sheet['G4'].alignment = AlignmentText1drive_sheet['G4'] = '事由'drive_sheet.merge_cells('G4:G5')drive_sheet['H4'].font = fontText2drive_sheet['H4'].alignment = AlignmentText1drive_sheet['H4'] = '本次出行发生车辆费用明细'drive_sheet.merge_cells('H4:M4')drive_sheet['H5'].font = fontText2drive_sheet['H5'].alignment = AlignmentText1drive_sheet['H5'] = '油费'drive_sheet['I5'].font = fontText2drive_sheet['I5'].alignment = AlignmentText1drive_sheet['I5'] = '路桥费'drive_sheet['J5'].font = fontText2drive_sheet['J5'].alignment = AlignmentText1drive_sheet['J5'] = '停车费'drive_sheet['K5'].font = fontText2drive_sheet['K5'].alignment = AlignmentText1drive_sheet['K5'] = '维修保养'drive_sheet['L5'].font = fontText2drive_sheet['L5'].alignment = AlignmentText1drive_sheet['L5'] = '其他费用(租车费)'drive_sheet['M5'].font = fontText2drive_sheet['M5'].alignment = AlignmentText1drive_sheet['M5'] = '费用合计'print('基本信息已填写完毕,请输入行程信息')# 行高和列宽设置def row_height():drive_sheet.row_dimensions[1].height = 20drive_sheet.row_dimensions[3].height = 35.25drive_sheet.row_dimensions[5].height = 36drive_sheet.column_dimensions['A'].width = 8drive_sheet.column_dimensions['B'].width = 10.63drive_sheet.column_dimensions['C'].width = 16.63drive_sheet.column_dimensions['D'].width = 16.75drive_sheet.column_dimensions['E'].width = 10.5drive_sheet.column_dimensions['F'].width = 10.5drive_sheet.column_dimensions['G'].width = 9.5# 输入行程基本信息def fill_chart():ycrq = input('用车日期(m月n日):')driver = input('用车人:')qd = input('起点:')goal = input('目的地及途经点:')lcb_s = input('里程表起点读数:')lcb_e = input('里程表终点读数:')res = input('事由:')oil = input('加油费(元):')cross = input('路桥费(元):')park = input('停车费(元):')repair = input('维修保养(元):')zc = input('其他(租车费)(元):')fyzj = float(oil)+float(cross)+float(park)+float(repair)+float(zc)drive_sheet.append([ycrq, driver, qd, goal, float(lcb_s), float(lcb_e),res, float(oil), float(cross), float(park), float(repair), float(zc), fyzj])
# 是否继续填入数据def contiune_fill():judge = input("是否继续添加租车信息?请选择(Y(是的,继续)/N(否,结束)):")while judge == 'Y':fill_chart()judge = input("是否继续添加租车信息?请选择(Y(是的,继续)/N(否,结束)):")if judge == 'N':break# 统计行数据def count_data():drive_sheet['A%s' % (row+1)] = '合计'drive_sheet['H%s' % (row+1)] = '=sum(H6:H%s)' % (row)drive_sheet['I%s' % (row+1)] = '=sum(I6:I%s)' % (row)drive_sheet['J%s' % (row+1)] = '=sum(J6:J%s)' % (row)drive_sheet['K%s' % (row+1)] = '=sum(K6:K%s)' % (row)drive_sheet['L%s' % (row+1)] = '=sum(L6:L%s)' % (row)drive_sheet['M%s' % (row+1)] = '=sum(M6:M%s)' % (row)# 写入末尾并设置格式def write_end():drive_sheet['A%s' % (row+2)] = '制表:'drive_sheet['C%s' % (row+2)] = '用车部门负责人确认:'drive_sheet.merge_cells('C%d:D%s' % (row+2, row+2))drive_sheet['E%s' % (row+2)] = '初核:'drive_sheet.merge_cells('E%d:F%s' % (row+2, row+2))drive_sheet['H%s' % (row+2)] = '复核:'drive_sheet.merge_cells('H%d:I%s' % (row+2, row+2))drive_sheet['J%s' % (row+2)] = '综合管理部负责人确认:'drive_sheet.merge_cells('J%s:L%s' % (row+2, row+2))# 注意行drive_sheet['A%s' % (row+4)] = '注:1、请各部门按照上表要求严格登记每次出车的相关信息,不得缺项。'drive_sheet['A%s' % (row+5)] = ' 2、上表需按照每一辆车一张表的形式进行统计。'drive_sheet['A%s' % (row+6)] = ' 3、上表至少按月度进行统计,并在报销相关车辆费用的时候作为附件提交。'drive_sheet['A%s' % (row+7)] = ' 4、本表统计范围仅包括公司自有车辆及以公司名义对外租赁使用的车辆。'drive_sheet['A%s' % (row+8)] = ' 5、本表必须由部门负责人签字确认。'for f in range(row+4, row+8):drive_sheet.merge_cells('A%d:F%s' % (f, f))
# 最后几行格式def last_alignment():# 设置最后几行文字格式col0 = drive_sheet['A%d:M%s' % (row+1, row+8)]for ce0 in col0:for cel0 in ce0:cel0.font = fontText3col4 = drive_sheet['A%d:J%s' % (row+2, row+8)]for ce4 in col4:for cel4 in ce4:cel4.font = fontText3cel4.alignment = AlignmentText3drive_sheet['E%d' % (row+2)].alignment = AlignmentText2# 所有单元格设置黑色框线col1 = drive_sheet['A4:M%s' % (row+1)]for ce1 in col1:for cel1 in ce1:cel1.border = border1# 所有数据单元格设置字体格式col2 = drive_sheet['A5:M%s' % (row+1)]for ce2 in col2:for cel2 in ce2:cel2.font = fontText3cel2.alignment = AlignmentText1# 判断是否初次写入数据并执行所有过程
if os.path.exists('临时租车行驶登记表test.xlsx'):filepath = '临时租车行驶登记表test.xlsx'drive_list = openpyxl.load_workbook(filepath)drive_sheet = drive_list.active# 获取初始行数row0 = drive_sheet.max_row# 取消合计及注意部分单元格的合并drive_sheet.unmerge_cells('C%d:D%s' % (row0-6, row0-6))drive_sheet.unmerge_cells('E%d:F%s' % (row0-6, row0-6))drive_sheet.unmerge_cells('H%d:I%s' % (row0-6, row0-6))drive_sheet.unmerge_cells('J%s:L%s' % (row0-6, row0-6))for s in range(row0-4, row0):drive_sheet.unmerge_cells('A%d:F%s' % (s, s))# 删除多余单元格drive_sheet.delete_rows(row0-7, row0)fill_chart()contiune_fill()# # 获取行数row = drive_sheet.max_rowcount_data()write_end()last_alignment()else:drive_list = Workbook()drive_sheet = drive_list.activedrive_sheet.sheet_view.showGridLines = Falsedrive_sheet.border = border2write_title()row_height()fill_chart()contiune_fill()# 获取行数row = drive_sheet.max_rowcount_data()write_end()last_alignment()# 记录完成,保存登记表
drive_list.save('临时租车行驶登记表test.xlsx')
print('记录完成,数据已录入表格')
后记
- 意义
自己明白这个程序确实不能省多少事,但是,个人用来练习Python中openpyxl模块的使用却比较合适,骨还是花了点时间写一下。
- 不足
其实这个程序不能算完整成品,比如统计区间数据不可选,文件名称不能自定义、没有图形化操作界面等。
但我上一节也说过,这个程序实际不能省掉多少事,不值得去花时间完善并且写图形化界面。将来如果遇到多用户,登记数据量大的时候,这个程序会更有用武之地,到时候加上上述缺失功能也许更有意义。
- 寄语
各位大佬如果有什么好的建议,请在评论区不吝赐教;如果有什么疑问,也可以在评论区问我,谢谢!
玩转openpyxl,用python制作一个公司租车记录登记表!相关推荐
- 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...
玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂.... 我打开了4399小游 ...
- python可视化迷宫求解_如何用 Python 制作一个迷宫游戏
相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...
- 20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放
20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放 文章目录 202205 ...
- python词云代码如何增加字数_3分钟教你用python制作一个简单词云
原标题:3分钟教你用python制作一个简单词云 首先需要安装三个包: 1.制作英文字母的词云 效果图: 代码实现: 其中,test.txt文件内容如下 2.制作中文的词云 效果图: 代码实现: 其中 ...
- python制作解压工具_使用python制作一个解压缩软件
python实现解压缩的重要模块就是--zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip install zipfile os是 ...
- python编写一个软件-使用python制作一个解压缩软件
python实现解压缩的重要模块就是――zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip install zipfile os是 ...
- python多进程关闭socket_用Python制作一个多进程UDP服务器,一个进程监听一个p
我想用Python制作一个多进程UDP服务器,从一个类中为每个进程监听一个端口: processListener.py:import multiprocessing import socket cla ...
- 如何使用Python制作一个会动的地球仪?
Python的功能十分强大,很多封装好的库调用即可能实现超级强大的效果,今天小千就来教大家如何去使用Python制作一个会动的地球仪. 今天我们要使用到的库是pyecharts,pyecharts 功 ...
- 手把手教你如何用Python制作一个电子相册?末附python教程
这里简单介绍一下python制作电子相册的过程,主要用到tkinter和pillow这2个库,tkinter用于窗口显示照片,pillow用来处理照片,照片切换分为2种方式,一种是自动切换(每隔5秒) ...
- python如何制作一个工程软件_使用python制作一个解压缩软件
python实现解压缩的重要模块就是--zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip install zipfile os是 ...
最新文章
- 求字符串全排列 python实现
- 转载一个关于JavaScript几种继承方法的总结
- WPF/E 2007年2月CTP发布了
- 虚拟桌面分屏_桌面中的灭霸 三星C49HG90 32:9超带鱼屏体验
- 某微型计算机指令格式如图,组成原理考试试卷
- 6. 成交量基础分析
- Machine Learning课程中的常见单词的含义
- 【源码】基于MPPT的光伏(PV)系统仿真
- jvm内存模型(jdk1.8)
- light动名词_2015年12月英语六级语法知识:动名词
- dell台式机进入安全模式_戴尔电脑如何进入安全模式?
- 计算机黑屏不亮,win7休眠后唤醒电脑但屏幕一直黑屏不亮的解决方法
- python爬京东联盟_Python爬取京东商品数据
- 解决:unable to find valid certification path to requested target
- SparkStreaming编程
- php base62,base62编码
- Oracle卸载卸不干净,Oracle彻底删除的办法(winxp)
- MTK平台基于EV1527的无线接收和发射程序
- 不刷新页面更新内容的方法
- 圆满收官,百花齐放!2022企业级低代码应用大赛获奖结果公布