由于每天的疫情上报体温表,他麻烦了,所以写了一个自动生成表格数据的功能
python安装xlrd、xlwt、xlutils
xlrd官网:https://xlrd.readthedocs.io/en/latest/
xlwt官网:https://xlwt.readthedocs.io/en/latest/
xlwings官网:https://www.xlwings.org/
pip安装
打开cmd窗口依次输入一下命令
pip install xlrd
pip install xlwt
pip install xlwings
由于新版本的无法操作xlsx,建议安装低版本pip install xlrd==1.2.0
库的引用
import xlrd
import xlwt
import xlwings as xw
import random
import time
import os
一、xlrd是读excel,xlwt是写excel的库
打开Excel文件读取数据
data = xlrd.open_workbook(filename)#文件名以及路径,如果路径或者文件名有中文给前面加一个 r
(1)获取book(excel文件)中一个工作表
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(sheet_indx) #通过索引顺序获取
table = data.sheet_by_name(sheet_name) #通过名称获取
# 以上三个函数都会返回一个xlrd.sheet.Sheet()对象
names = data.sheet_names() #返回book中所有工作表的名字
data.sheet_loaded(sheet_name or indx) # 检查某个sheet是否导入完毕
(2) 行的操作
nrows = table.nrows
# 获取该sheet中的行数,注,这里table.nrows后面不带().
table.row(rowx)
# 返回由该行中所有的单元格对象组成的列表,这与tabel.raw()方法并没有区别。
table.row_slice(rowx)
# 返回由该行中所有的单元格对象组成的列表
table.row_types(rowx, start_colx=0, end_colx=None)
# 返回由该行中所有单元格的数据类型组成的列表;
# 返回值为逻辑值列表,若类型为empy则为0,否则为1
table.row_values(rowx, start_colx=0, end_colx=None)
# 返回由该行中所有单元格的数据组成的列表
table.row_len(rowx)
# 返回该行的有效单元格长度,即这一行有多少个数据
(3)列(colnum)的操作
ncols = table.ncols # 获取列表的有效列数
table.col(colx, start_rowx=0, end_rowx=None)
# 返回由该列中所有的单元格对象组成的列表
table.col_slice(colx, start_rowx=0, end_rowx=None)
# 返回由该列中所有的单元格对象组成的列表
table.col_types(colx, start_rowx=0, end_rowx=None)
# 返回由该列中所有单元格的数据类型组成的列表
table.col_values(colx, start_rowx=0, end_rowx=None)
# 返回由该列中所有单元格的数据组成的列表
(4)单元格的操作
table.cell(rowx,colx)
# 返回单元格对象
table.cell_type(rowx,colx)
# 返回对应位置单元格中的数据类型
table.cell_value(rowx,colx)
# 返回对应位置单元格中的数据
使用xlwt创建新表格并写入
使用xlwt创建新表格并写入
def fun3_2_2():
# 创建新的workbook(其实就是创建新的excel)
workbook = xlwt.Workbook(encoding= 'ascii')
# 创建新的sheet表
worksheet = workbook.add_sheet("My new Sheet")
# 往表格写入内容 worksheet.write(0,0, "内容1")
worksheet.write(2,1, "内容2")
# 保存 workbook.save("新创建的表格.xls")
xlwt 设置字体格式
xlwt设置字体格式、
def fun3_2_3():
# 创建新的workbook(其实就是创建新的excel)
workbook = xlwt.Workbook(encoding= 'ascii')
# 创建新的sheet表
worksheet = workbook.add_sheet("My new Sheet")
style = xlwt.XFStyle()# 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = 'Times New Roman' #字体
font.bold = True #加粗
font.underline = True #下划线
font.italic = True #斜体
style.font = font # 设置样式
worksheet.write(0,0, "内容1")# 往表格写入内容
worksheet.write(2,1, "内容2",style)
workbook.save("新创建的表格.xls") # 保存
xlwt 设置列宽
- xlwt中列宽的值表示方法:默认字体0的1/256为衡量单位。
- xlwt创建时使用的默认宽度为2960,既11个字符0的宽度
- 所以我们在设置列宽时可以用如下方法:
- width = 256 * 20 256为衡量单位,20表示20个字符宽度
设置列宽
def fun3_2_4(): # 创建新的workbook(其实就是创建新的excel)
workbook = xlwt.Workbook(encoding= 'ascii') # 创建新的sheet表
worksheet = workbook.add_sheet("My new Sheet") # 往表格写入内容
worksheet.write(0,0, "内容1")
worksheet.write(2,1, "内容2") # 设置列宽
worksheet.col(0).width = 256*20 # 保存
workbook.save("新创建的表格.xls")
xlwt 设置行高
在xlwt中没有特定的函数来设置默认的列宽及行高
行高是在单元格的样式中设置的,你可以通过自动换行通过输入文字的多少来确定行高
设置行高
def fun3_2_5(): # 创建新的workbook(其实就是创建新的excel)
workbook = xlwt.Workbook(encoding= 'ascii') # 创建新的sheet表
worksheet = workbook.add_sheet("My new Sheet") # 往表格写入内容
worksheet.write(0,0, "内容1")
worksheet.write(2,1, "内容2") # 设置行高
style = xlwt.easyxf('font:height 360;') # 18pt,类型小初的字号
row = worksheet.row(0)
row.set_style(style) # 保存
workbook.save("新创建的表格.xls")
xlwt 合并列和行
合并列和行
def fun3_2_6(): # 创建新的workbook(其实就是创建新的excel)
workbook = xlwt.Workbook(encoding= 'ascii') # 创建新的sheet表
worksheet = workbook.add_sheet("My new Sheet") # 往表格写入内容
worksheet.write(0,0, "内容1") # 合并 第1行到第2行 的 第0列到第3列
worksheet.write_merge(1, 2, 0, 3, 'Merge Test') # 保存
workbook.save("新创建的表格.xls")
xlwt 添加边框
程序示例:添加边框
def fun3_2_7(): # 创建新的workbook(其实就是创建新的excel)
workbook = xlwt.Workbook(encoding= 'ascii') # 创建新的sheet表
worksheet = workbook.add_sheet("My new Sheet") # 往表格写入内容
worksheet.write(0,0, "内容1") # 设置边框样式
borders = xlwt.Borders() #Create Borders
# May be: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR,
# MEDIUM_DASHED, THIN_DASH_DOTTED, MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED,
# MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED, or 0x00 through 0x0D.
# DASHED虚线 # NO_LINE没有 # THIN实线
borders.left = xlwt.Borders.DASHED
borders.right = xlwt.Borders.DASHED
borders.top = xlwt.Borders.DASHED
borders.bottom = xlwt.Borders.DASHED
borders.left_colour = 0x40
borders.right_colour = 0x40
borders.top_colour = 0x40
borders.bottom_colour = 0x40
style = xlwt.XFStyle() # Create Style
style.borders = borders # Add Borders to Style
worksheet.write(0, 0, '内容1', style)
worksheet.write(2,1, "内容2") # 保存
workbook.save("新创建的表格.xls")
xlwt为单元格设置背景色
程序示例:# 设置单元格背景色
def fun3_2_8(): # 创建新的workbook(其实就是创建新的excel)
workbook = xlwt.Workbook(encoding= 'ascii') # 创建新的sheet表
worksheet = workbook.add_sheet("My new Sheet") # 往表格写入内容
worksheet.write(0,0, "内容1") # 创建样式
pattern = xlwt.Pattern() # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # May be: 8 through 63. 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow,
# 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow ,
# almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray, the list goes on...
pattern.pattern_fore_colour = 5
style = xlwt.XFStyle()
style.pattern = pattern # 使用样式
worksheet.write(2,1, "内容2",style)
xlwt设置单元格对齐
使用xlwt中的Alignment来设置单元格的对齐方式,其中horz代表水平对齐方式,vert代表垂直对齐方式。
- VERT_TOP = 0x00 上端对齐
- VERT_CENTER = 0x01 居中对齐(垂直方向上)
- VERT_BOTTOM = 0x02 低端对齐
- HORZ_LEFT = 0x01 左端对齐
- HORZ_CENTER = 0x02 居中对齐(水平方向上)
- HORZ_RIGHT = 0x03 右端对齐
程序示例:设置单元格对齐
def fun3_2_9(): # 创建新的workbook(其实就是创建新的excel)
workbook = xlwt.Workbook(encoding= 'ascii') # 创建新的sheet表
worksheet = workbook.add_sheet("My new Sheet") # 往表格写入内容
worksheet.write(0,0, "内容1") # 设置样式
style = xlwt.XFStyle()
al = xlwt.Alignment() # VERT_TOP = 0x00 上端对齐
# VERT_CENTER = 0x01 居中对齐(垂直方向上)
# VERT_BOTTOM = 0x02 低端对齐
# HORZ_LEFT = 0x01 左端对齐
# HORZ_CENTER = 0x02 居中对齐(水平方向上)
# HORZ_RIGHT = 0x03 右端对齐
al.horz = 0x02 # 设置水平居中
al.vert = 0x01 # 设置垂直居中
style.alignment = al # 对齐写入
worksheet.write(2,1, "内容2",style) # 保存
workbook.save("新创建的表格.xls")#
拷贝源文件
def fun3_3_2():
workbook = xlrd.open_workbook('3_3 xlutils 修改操作练习.xlsx') # 打开工作簿
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_workbook.save("new_test.xls") # 保存工作簿
xlutils 读取 写入 (也就是修改)Excel 表格信息
程序示例:xlutils读取 写入 Excel 表格信息
def fun3_3_3(): # file_path:文件路径,包含文件的全名称
# formatting_info=True:保留Excel的原格式(使用与xlsx文件)
workbook = xlrd.open_workbook('3_3 xlutils 修改操作练习.xlsx')
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
# 读取表格信息
sheet = workbook.sheet_by_index(0)
col2 = sheet.col_values(1) # 取出第二列
cel_value = sheet.cell_value(1, 1)
print(col2)
print(cel_value) # 写入表格信息
write_save = new_workbook.get_sheet(0)
write_save.write(0, 0, "xlutils写入!")
new_workbook.save("new_test.xls") # 保存工作簿
xlwings比起xlrd、xlwt和xlutils,xlwings可豪华多了,它具备以下特点:
- xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改
- 可以和matplotlib以及pandas无缝连接,支持读写numpy、pandas数据类型,将matplotlib可视化图表导入到excel中。
- 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。
- 开源免费,一直在更新
基本操作
打开Excel程序,默认设置:程序可见,只打开不新建工作薄
app = xw.App(visible=True,add_book=False)#新建工作簿 (如果不接下一条代码的话,Excel只会一闪而过,卖个萌就走了)
wb = app.books.add()
打开已有工作簿(支持绝对路径和相对路径)
wb = app.books.open('example.xlsx')#练习的时候建议直接用下面这条
#wb = xw.Book('example.xlsx')#这样的话就不会频繁打开新的Excel
保存工作簿
wb.save('example.xlsx')
退出工作簿(可省略)
wb.close()
退出Excel
app.quit()
三个例子:
(1)打开已存在的Excel文档
# 导入xlwings模块
import xlwings as xw
# 打开Excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
app=xw.App(visible=True,add_book=False)
app.display_alerts=Falseapp.screen_updating=False # 文件位置:filepath,打开test文档,然后保存,关闭,结束程序
filepath=r'g:Python Scriptstest.xlsx'
wb=app.books.open(filepath)
wb.save()
wb.close()
app.quit()
(2)新建Excel文档,命名为test.xlsx,并保存在D盘
import xlwings as xw
app=xw.App(visible=True,add_book=False)
wb=app.books.add()
wb.save(r'd:test.xlsx')
wb.close()
app.quit()
(3)在单元格输入值
新建test.xlsx,在sheet1的第一个单元格输入 “人生” ,然后保存关闭,退出Excel程序。
import xlwings as xw
app=xw.App(visible=True,add_book=False)
wb=app.books.add() # wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
wb.sheets['sheet1'].range('A1').value='人生' wb.save(r'd:test.xlsx')
wb.close()
app.quit()
打开已保存的test.xlsx,在sheet2的第二个单元格输入“苦短”,然后保存关闭,退出Excel程序
import xlwings as xw
app=xw.App(visible=True,add_book=False)
wb=app.books.open(r'd:test.xlsx') # wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
wb.sheets['sheet1'].range('A1').value='苦短'
wb.save()
wb.close()
app.quit()
掌握以上代码,已经完全可以把Excel当作一个txt文本进行数据储存了,也可以读取Excel文件的数据,进行计算后,并将结果保存在Excel中。
引用工作薄、工作表和单元格
(1)按名字引用工作簿,注意工作簿应该首先被打开
wb=xw.books['工作簿的名字‘]
(2)引用活动的工作薄
wb=xw.books.active
(3)引用工作簿中的sheet
sht=xw.books['工作簿的名字‘].sheets['sheet的名字']# 或者wb=xw.books['工作簿的名字']sht=wb.sheets[sheet的名字]
(4)引用活动sheet
sht=xw.sheets.active
(5)引用A1单元格
rng=xw.books['工作簿的名字‘].sheets['sheet的名字']# 或者sht=xw.books['工作簿的名字‘].sheets['sheet的名字']rng=sht.range('A1')
(6)引用活动sheet上的单元格
# 注意Range首字母大写
rng=xw.Range('A1')
#其中需要注意的是单元格的完全引用路径是:
# 第一个Excel程序的第一个工作薄的第一张sheet的第一个单元格
xw.apps[0].books[0].sheets[0].range('A1')
#迅速引用单元格的方式是
sht=xw.books['名字'].sheets['名字']
# A1单元格
rng=sht[’A1']
# A1:B5单元格
rng=sht['A1:B5']
# 在第i+1行,第j+1列的单元格# B1单元格
rng=sht[0,1] # A1:J10rng=sht[:10,:10]
#PS: 对于单元格也可以用表示行列的tuple进行引用# A1单元格的引用
xw.Range(1,1)
#A1:C3单元格的引用xw.Range((1,1),(3,3))
引用单元格:
rng = sht.range('a1')
#rng = sht['a1']
#rng = sht[0,0] 第一行的第一列即a1,相当于pandas的切片
引用区域:
rng = sht.range('a1:a5')
#rng = sht['a1:a5']
#rng = sht[:5,0]
写入&读取数据
1.写入数据
(1)选择起始单元格A1,写入字符串‘Hello’
sht.range('a1').value = 'Hello'
(2)写入列表
# 行存储:将列表[1,2,3]储存在A1:C1中
sht.range('A1').value=[1,2,3]
# 列存储:将列表[1,2,3]储存在A1:A3中
sht.range('A1').options(transpose=True).value=[1,2,3]
# 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4
sht.range('A1').options(expand='table')=[[1,2],[3,4]]
- 默认按行插入:A1:D1分别写入1,2,3,4
sht.range('a1').value = [1,2,3,4]
等同于
sht.range('a1:d1').value = [1,2,3,4]
- 按列插入: A2:A5分别写入5,6,7,8
你可能会想:
sht.range('a2:a5').value = [5,6,7,8]
但是你会发现xlwings还是会按行处理的,上面一行等同于:
sht.range('a2').value = [5,6,7,8]
正确语法:
sht.range('a2').options(transpose=True).value = [5,6,7,8]
既然默认的是按行写入,我们就把它倒过来嘛(transpose),单词要打对,如果你打错单词,它不会报错,而会按默认的行来写入(别问我怎么知道的)
- 多行输入就要用二维列表了:
sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']]
2.读取数据
(1)读取单个值
# 将A1的值,读取到a变量中
a=sht.range('A1').value
(2)将值读取到列表中
#将A1到A2的值,读取到a列表中
a=sht.range('A1:A2').value
# 将第一行和第二行的数据按二维数组的方式读取
a=sht.range('A1:B2').value
- 选取一列的数据
先计算单元格的行数(前提是连续的单元格)
rng = sht.range('a1').expand('table')nrows = rng.rows.count
接着就可以按准确范围读取了
a = sht.range(f'a1:a{nrows}').value
- 选取一行的数据
ncols = rng.columns.count#用切片fst_col = sht[0,:ncols].value
常用函数和方法
1.Book工作薄常用的api
wb=xw.books[‘工作簿名称']
-
wb.activate() 激活为当前工作簿
-
wb.fullname 返回工作簿的绝对路径
-
wb.name 返回工作簿的名称
-
wb.save(path=None) 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
-
wb. close() 关闭工作簿
代码示例:
# 引用Excel程序中,当前的工作簿
wb=xw.books.acitve
# 返回工作簿的绝对路径
x=wb.fullname
# 返回工作簿的名称
x=wb.name
# 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
x=wb.save(path=None)
# 关闭工作簿
x=wb.close()
2.sheet常用的api
# 引用某指定
sheetsht=xw.books['工作簿名称'].sheets['sheet的名称']
# 激活sheet为活动工作表
sht.activate()
# 清除sheet的内容和格式
sht.clear()
# 清除sheet的内容
sht.contents()
# 获取sheet的名称
sht.name
# 删除
sheetsht.delete
3.range常用的api
# 引用当前活动工作表的单元格
rng=xw.Range('A1')
# 加入超链接
# rng.add_hyperlink(r'www.baidu.com','百度',‘提示:点击即链接到百度')
# 取得当前range的地址
rng.addressrng.get_address()
# 清除range的内容
rng.clear_contents()
# 清除格式和内容
rng.clear()
# 取得range的背景色,以元组形式返回RGB值
rng.color
# 设置range的颜色
rng.color=(255,255,255)
# 清除range的背景色
rng.color=None
# 获得range的第一列列标
rng.column
# 返回range中单元格的数据
rng.count
# 返回current_region
rng.current_region
# 返回ctrl + 方向
rng.end('down')
# 获取公式或者输入公式
rng.formula='=SUM(B1:B5)'
# 数组公式
rng.formula_array
# 获得单元格的绝对地址
rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False)
# 获得列宽
rng.column_width
# 返回range的总宽度
rng.width
# 获得range的超链接
rng.hyperlink
# 获得range中右下角最后一个单元格rng.last_cell
# range平移
rng.offset(row_offset=0,column_offset=0)
#range进行resize改变range的大小
rng.resize(row_size=None,column_size=None)
# range的第一行行标
rng.row
# 行的高度,所有行一样高返回行高,不一样返回
Nonerng.row_height
# 返回range的总高度
rng.height
# 返回range的行数和列数
rng.shape
# 返回range所在的sheet
rng.sheet
#返回range的所有行
rng.rows# range的第一行
rng.rows[0]
# range的总行数
rng.rows.count
# 返回range的所有列
rng.columns
# 返回range的第一列
rng.columns[0]
# 返回range的列数
rng.columns.count
# 所有range的大小自适应
rng.autofit()
# 所有列宽度自适应
rng.columns.autofit()
# 所有行宽度自适应
rng.rows.autofit()
4.books 工作簿集合的api
# 新建工作簿xw.books.add()# 引用当前活动工作簿xw.books.active
4.sheets 工作表的集合
# 新建工作表
xw.sheets.add(name=None,before=None,after=None)
# 引用当前活动
sheetxw.sheets.active
4.6 数据结构
1.一维数据
python的列表,可以和Excel中的行列进行数据交换,python中的一维列表,在Excel中默认为一行数据。
import xlwings as xw
sht=xw.sheets.active
# 将1,2,3分别写入了A1,B1,C1单元格中
sht.range('A1').value=[1,2,3]
# 将A1,B1,C1单元格的值存入list1列表中
list1=sht.range('A1:C1').value
# 将1,2,3分别写入了A1,A2,A3单元格中
sht.range('A1').options(transpose=True).value=[1,2,3]
# 将A1,A2,A3单元格中值存入list1列表中
list1=sht.range('A1:A3').value
2.二维数据
python的二维列表,可以转换为Excel中的行列。二维列表,即列表中的元素还是列表。在Excel中,二维列表中的列表元素,代表Excel表格中的一列。例如:
# 将a1,a2,a3输入第一列,b1,b2,b3输入第二列
list1=[[‘a1’,'a2','a3'],['b1','b2','b3']]sht.range('A1').value=list1
# 将A1:B3的值赋给二维列表
list1list1=sht.range('A1:B3').value
3.Excel中区域的选取表格
# 选取第一列rng=sht. range('A1').expand('down')rng.value=['a1','a2','a3']
# 选取第一行rng=sht.range('A1').expand('right')rng=['a1','b1']
# 选取表格rng.sht.range('A1').expand('table')rng.value=[[‘a1’,'a2','a3'],['b1','b2','b3']]
学习完基础函数,开始设计本次自动化表格代码
由于大部分人体温测出来区间都在36.4度,随意需要加入权重,这样数据更准确
#加入体温权重随机数def random_weight(): data = {0:3,1:20,2:80,3:80,4:80,5:80,6:70,7:30,8:6,9:5,10:1} _total = sum(data.values()) _random = random.uniform(0, _total) _curr_sum = 0 _ret = None _keys = data.keys() for _k in _keys: _curr_sum += data[_k] if _random <= _curr_sum: _ret = _k break return _ret因为班级有52人,而且每个人需要上交早中晚三次体温,所以需要生成3*52的二维表
#生产随机二维表def rabdd(): b=[[0.0,0.0,0.0]]*53 b = [[(float(random_weight()/10)+36.0) for j in range(1, 4)] for i in range(1, 53)] #print(b) return b打开出师表格,获取表格中的行列数,读出数据
def read_xlsx(): xlsx = xlrd.open_workbook("original.xlsx") table = xlsx.sheet_by_index(0) nrows = table.nrows print("表格一共有",nrows,"行") ncols = table.ncols # 获取列表的有效列数 print("表格一共有",ncols,"列") for j in range(52): name_list = [str(table.cell_value(3+j, i)) for i in range(1, ncols)] print(name_list)获取时间,已string格式输出
def get_time(): t = time.localtime() StrTime = str(t.tm_year )+'/'+ str(t.tm_mon)+ '/' +str(t.tm_mday) print("时间:",StrTime) return StrTime生成带日期的文件名字
def get_data_flat(): t = time.localtime() Strfle = './' +str(t.tm_mon)+ '.' +str(t.tm_mday)+"电气Z2191班体温填报表.xlsx" return Strfle复制excel表格,用函数的名字代替
def copy_name(): srd = 'echo f |xcopy '+ 'original.xlsx '+ get_data_flat() os.system(srd)主函数
if __name__ == "__main__": input("请按回车键开始自动执行") #rabdd() write_xlsx() read_xlsx() copy_name()打包成exe文件
首先安装pyinstaller,使用安装命令:pip3 install pyinstaller
我们写的python脚本是不能脱离python解释器单独运行的,所以在打包的时候,至少会将python解释器和脚本一起打包,同样,为了打包的exe能正常运行,会把我们所有安装的第三方包一并打包到exe。
即使我们的项目只使用的一个requests包,但是可能我们还安装了其他n个包,但是他不管,因为包和包只有依赖关系的。比如我们只装了一个requests包,但是requests包会顺带装了一些其他依赖的小包,所以为了安全,只能将所有第三方包+python解释器一起打包。
我们来将这个.py的文件打包成一个exe,我们直接cmd切换到这个脚本的目录,执行命令:pyinstaller-F setup.py,如下图所示。
执行完毕之后,会生成几个文件夹,如下图所示。
在dist里面呢,就有了一个exe程序,这个就是可执行的exe程序
默认打包图片,如下图所示。

加上 -i 参数之后,如下图所示,会形成一个类似风力发电机的logo图案。

程序路径最好全部都是英文,否则肯能会出现莫名其妙的问题
到此我们的程序就做好了
Натуральные, экологически чистые алтайские продукты питания известны не только в России, но и далеко за ее пределами Спрей для носа с морской водой Риноморе
Лучший военный магазин для настоящих поклонников, только у лучших.
Секрет успеха каждого воинского подразделения: качественное снаряжение, применяйте.
Только лучшие модели военной техники, лишь у лучших.
Снаряжение для любых военных мероприятий: выбирайте лучшее, получайте.
Лучший выбор для военных операций: только качественное снаряжение, используйте.
Огнестрельное оружие для спецназа и армии, выбирайте.
Идеальное снаряжение для профессиональных военных операций, только у нас.
Выбор профессионалов: только качественная техника, получайте.
Как выбрать идеальное снаряжение для задач, лишь у лучших.
військовий одяг інтернет магазин https://magazinvoentorgdcfr.kiev.ua/ .
Wygrywaj z 21 w blackjacku, tworz zwycieskie uklady w pokerze, stawiaj zaklady w kasynie na zywo i baw sie przy najlepszych grach online w kasynie na zywo https://grakasynonazywo.pl/
Профессиональная химчистка ковра или ковролина по разумной цене. Оперативный выезд, быстрая сушка sofa cleaning
Военный арсенал мечты на вашем пороге, только у лучших.
Оптимальное снаряжение для эффективных боевых действий, однозначно у проверенных поставщиков.
Только лучшие модели военной техники, заказывайте.
Как выбрать идеальное снаряжение для задач, приобретайте.
Лучший выбор для военных операций: только качественное снаряжение, приобретайте.
Выбор каждого воина: только лучшее оружие, исключительно у проверенных поставщиков.
Экипировка для самых опасных миссий: делайте свой выбор, только у проверенных поставщиков.
Мощное вооружение для армии и спецназа, только у нас.
Как выбрать идеальное снаряжение для задач, только у нас.
магазин військового спорядження київ магазин військового спорядження київ .
Изделия без маркировки изготовителя либо с маркировкой запрещающей аквачистку, принимаются в чистку только с согласия Клиента и обрабатываются по существующим технологиям, без претензий к качеству и товарному виду изделия химчистка ковров спб
Предоставляем возможность купить авто от прямого поставщика по достойной цене. Высококвалифицированные специалисты всегда помогут выбрать именно ту модель автомобиля, которая будет идеально отвечать всем вашим требованиям и пожеланиям polar stone 01 купить
Federation of Scout Associations of Spain https://scout.es/scout-academy-2017 is a non-profit entity whose registered office is located in Lake
A collection of 18-25-year olds from around the UK https://www.scouts.org.uk/volunteers/running-things-locally/recruiting-and-managing-volunteers/role-descriptions/uk-rep-pool/ who are trained to represent the UK Scouts at events in the UK and abroad.
грузовой подъемник для склада купить грузовые строительные подъемники
Если вы переезжаете, делаете ремонт или не знаете, куда девать несезонное имущество, то аренда склада для хранения вещей решит проблему. Оказываем услуги физическим лицам, предпринимателям и организациям https://self-storage-msk.ru/
телефон такси вызвать такси
заказ такси новочеркасск https://taxi-novocherkassk238.ru
заказ такси заказать такси по телефону
номер такси шахты номер телефона такси
Китайские марки автомобилей список, история и подробное описание популярных китайских авто. Рассказываем о плюсах и минусах polar stone 01
Советы по выбору напольного плинтуса, которые вы обязательно должны знать.
Топ-10 самых популярных цветов напольных плинтусов, подчеркнуть дизайн помещения.
Как установить напольный плинтус своими руками, которую сможет выполнить каждый.
Как сделать плинтус фотолюминесцентным, для удивительного эффекта.
Лучшие материалы для изготовления напольных плинтусов, для долговечности и красоты.
Творческий подход к использованию плинтуса в интерьере, которые вдохновят вас на новые решения.
Как выбрать плинтус для ламината, для создания идеального сочетания цветов.
Плинтус как элемент безопасности в доме, для защиты от скольжения.
Идеи декора с плинтусом, для оформления помещения в современном стиле.
Почему выбор правильного плинтуса важен для вашего дома, для создания гармонии в интерьере.
Как сделать плинтус элементом стиля, для добавления индивидуальности в помещение.
carrello 3 в 1 коляска carrello 3 в 1 коляска .
Заказать алкоголь с доставкой на дом в Раменском и Раменском районе. Мы работаем круглосуточно 24 часа. Доставка ночью от 20 минут https://drinksramenskoe.ru
WOW just what I was searching for. Came here by searching for daily
cipher hamster kombat
Топовые варианты напольных плинтусов, для завершения ремонта|Практичные рекомендации по выбору плинтуса для пола, который гармонично впишется в ваш дом|Полезные советы по монтажу плинтусов для пола, чтобы сэкономить время и усилия|Идеи для декоративной отделки плинтуса, для добавления ярких ноток в дом|Выбор между деревянным, пластиковым и металлическим плинтусом, для обеспечения долговечности|Как сделать плинтус не только функциональным, но и декоративным элементом, которые вдохновят вас на творчество|Зачем нужны напольные плинтусы и какие у них функции, для осознания важности деталей в дизайне|Как поддерживать их первоначальный вид на протяжении долгого времени, для бережного отношения к отделке|Лучшие решения для плинтусов в детской комнате, которые сделают детскую комнату уютной и безопасной|Как выбрать цвет плинтуса, чтобы подчеркнуть стиль интерьера, которые придают помещению индивидуальность и характер|Советы по выбору плинтусов, которые помогут скрыть недостатки пола, для придания гладкости и аккуратности|Советы по подбору ярких и нестандартных решений для плинтусов, для создания необычных дизайнерских решений|Идеи для гармоничного сочетания плинтусов с низкими потолками, для визуального увеличения пространства|Идеи для создания плавных и безупречных переходов между углами, для достижения идеальной гармонии в дизайне|Советы по выбору влагостойких и долговечных плинтусов для ванных комнат, для обеспечения защиты от влаги и формирования плесени|Как сделать плинтусы незаметными в интерьере
высокие плинтуса https://plintusnapolnyjshirokij.ru/ .
http://chatbot-plus.com/
Купон за 2р. предоставляет скидку до 25% на абонементы в сеть фитнес-клубов «Комета». Купон придет на вашу электронную почту и в личный кабинет Промокод Казино Комета
Советы по выбору напольного плинтуса, перед ремонтом.
Топ-10 самых популярных цветов напольных плинтусов, чтобы сделать стильный акцент.
Простая инструкция по установке плинтуса, которую сможет выполнить каждый.
Почему плинтус сверкает в темноте, о которых вы не знали.
Преимущества различных типов материалов, для создания идеального интерьера.
Идеи дизайна с использованием напольного плинтуса, которые вдохновят вас на новые решения.
Советы по подбору и установке плинтуса для ламината, чтобы ваш пол выглядел завершенным.
Плинтус как элемент безопасности в доме, для предотвращения травм.
Идеи декора с плинтусом, которые покорят вас своей оригинальностью.
Как плинтус влияет на общий вид помещения, которые учесть необходимо.
Необычные идеи дизайна с использованием плинтуса, для создания оригинального интерьера.
купить коляску карелло браво https://kolyaskicarello.ru/ .
https://ekostil-salon.ru/
Every business needs to select the right social media in this digital era. There are so many of them that it becomes tough sometimes to pick and choose what will work best for your marketing effect https://www.linkedin.com/pulse/why-important-increase-number-subscribers-likes-views-john-caller-9x2oe/
Thanks , I’ve just been searching for information approximately this subject for
a while and yours is the best I have found out so far.
But, what concerning the conclusion? Are you
sure in regards to the supply?
Hey fantastic website! Does running a blog such as this require a great deal of work? I have no knowledge of coding however I was hoping to start my own blog soon. Anyhow, if you have any recommendations or techniques for new blog owners please share. I understand this is off topic nevertheless I simply needed to ask. Thanks!
https://roofers-msk.ru/
Играйте в лучшие казино, ТОП-10 список: честные и надежные, на реальные деньги, быстрые выплаты и выводы, минималные ставки, лицензия и проверенные, мобильные, популярные и новые, бонусы и фрисписны, слоты и автоматы рейтинг лучших казино с бонусами
Greetings all! I felt compelled to share my newest passion – Kanye West’s posters. As an avid follower of Kanye’s music, I’ve always been captivated by his original creative vision.
Lately, I came across several stunning posters that perfectly capture his iconic album covers. Including *The College Dropout* , as well as *My Beautiful Dark Twisted Fantasy*, these artworks go beyond being aesthetic masterpieces but additionally serve as a tribute to Kanye’s progression as an artist.
I chose to decorate my space with multiple these posters, and I am happy to report that they introduce a whole new atmosphere to the room. Every time I see them, I’m prompted by Kanye’s innovative creative genius.
For anyone interested in getting some Kanye West pieces for your own space, I cannot recommend enough checking out the wide range up for grabs. There are countless artworks to choose from, whether you like vibrant colors or more eclectic interpretations.
What’s great is that these artworks make great presents for friends who love Kanye. I got one for a pal, and they absolutely loved it. It’s an awesome way to express your appreciation for Kanye’s artistry and infuse a hint of his vision into your space.
To sum up, if you love Kanye, certainly look into adding some Kanye West pieces. They are guaranteed to infuse a unique touch to your living area and serve as a regular inspiration of Kanye’s incredible artistic journey. Happy decorating, everyone!
Case battle, кейс батл официальный сайт – уникальные кейсы, быстрый вывод скинов, поддержка 24/7 https://cases-battle.net
Современные развлекательные площадки в интернете предоставляют множество возможностей для увлекательного досуга. Однако иногда возникают трудности с доступом к этим платформам http://www.motorenova.pl/wiki/doku.php?id=%20%D0%9A%D0%B0%D0%BA%20%D0%BF%D0%BE%D0%B1%D0%B5%D0%B4%D0%B8%D1%82%D1%8C%20%D0%B2%20%D0%B6%D0%B8%D0%B2%D0%BE%D0%BC%20%D0%BA%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE%20Champion
Have you ever thought about including a little bit more than just
your articles? I mean, what you say is valuable and everything.
Nevertheless think about if you added some great pictures or videos to give your posts more, “pop”!
Your content is excellent but with images and clips,
this blog could definitely be one of the most beneficial in its field.
Terrific blog!
Что такое игры казино? Это возможность разобраться в правилах таких популярных азартных игр как: покер, блэкджек, рулетка, слоты с джекпотами http://sanakirja.kronman.fi/index.php?title=%20%D0%9A%D0%B0%D0%BA%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BE%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D0%B7%D0%B5%D1%80%D0%BA%D0%B0%D0%BB%D0%B0%20%D0%A7%D0%B5%D0%BC%D0%BF%D0%B8%D0%BE%D0%BD%20%D0%BA%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE
In relations to ecological durability, LED signs has actually proven to be an extra energy-efficient alternative compared to typical signs procedures. Along with the enhancing concentrate on green strategies in sign creation, LED modern technology is actually poised to participate in an important duty in shaping the market’s future. The seamless integration of LED signs with electronic publishing procedures has additionally opened brand new avenues for signboard creation in Tokorozawa, Saitama, https://www.akonter.com/story/reinventing-signboard-design-in-tokorozawa/.
Отказное (информационное) письмо подтверждает, что товар не нуждается в прохождении обязательной сертификации до продажи. Мы подготовили для вас ответы на самые популярные вопросы — о цене, требованиях, сроках отказного письма, и где его купить https://dzen.ru/a/ZuQlWcS6C3ZUtygf
Увлекательное казино Cryptoboss ждет вас, станьте победителем вместе с Cryptoboss, криптовалютные ставки для настоящих боссов, выиграйте криптовалюты в казино от Cryptoboss, стать криптобоссом легко с Cryptoboss casino, Cryptoboss casino – ваш лучший выбор, будьте боссом в мире криптовалютных игр с Cryptoboss casino, участвуйте в захватывающих играх в Cryptoboss casino, удивительные возможности в казино от Cryptoboss, особые привилегии для лучших игроков, революция в криптовалютных играх с Cryptoboss casino, играйте на криптовалютных волнах вместе с Cryptoboss, получите криптовалютные призы в Cryptoboss casino, следуйте за лидером с Cryptoboss casino, Cryptoboss casino – ваше казино удачи, Cryptoboss casino – гарант криптовалютных побед.
сайт cryptoboss casino сайт cryptoboss casino .
Интернет-магазин плитки и керамики «МегаПлитка»
Интернет-магазин керамической плитки и керамогранита «MegaPlitka» (megaplitka.com) предлагает широкий ассортимент высококачественной плитки и керамогранита от ведущих производителей.
Мы стремимся предложить нашим клиентам только лучшее, поэтому в ассортименте представлены товары, отвечающие самым высоким стандартам качества и дизайна.
Мы понимаем, что выбор керамической плитки и керамогранита – это важный этап в создании комфортного и стильного интерьера.
Поэтому наша команда профессионалов готова помочь вам в подборе идеального варианта для вашего проекта.
Независимо от того, нужны ли вам плитка для ванной комнаты, кухни, гостиной, или же керамогранит для облицовки пола, вы всегда найдете у нас разнообразные и актуальные коллекции,
соответствующие последним тенденциям в области дизайна интерьеров.
Официальный сайт «МегаПлитка» «МегаПлитка».
Керамическая плитка и керамогранит в «КосмоПлитка»
Интернет-магазин «КосмоПлитка» (cosmoplitka.com) с 2015 года поставляет для вас лучшую керамическую плитку и керамогранит.
Мы гарантируем качество всех предлагаемых материалов в каталоге, так как сотрудничаем только с проверенными производителями.
В каталоге можно найти коллекции от таких брендов, как APE, Vitra, Rango.
Команда квалифицированных сотрудников всегда на связи и готова оказать консультативную помощь.
Для вашего удобства мы предлагаем быструю доставку и комфортные способы оплаты!
«КосмоПлитка» cosmoplitka.com – достойный поставщик и лидер в сердцах многих клиентов, каждый день мы совершенствуем свою работу, чтобы продолжать развиваться.
Распродажа плитки, звоните +7 925 815-26-05
Официальный сайт «КосмоПлитка».
Внедорожник BYD Leopard — лучший вариант для комфортного преодоления любых препятствий. Благодаря задней и передней блокировкам дифференциала он обладает великолепной проходимостью купить электромобиль из китая
Не упустите шанс, переходите на зеркало Cryptoboss Casino сейчас, играйте без проблем!
Новое зеркало Cryptoboss Casino доступно для всех!, полный контроль гарантированы.
Лучшее зеркало Cryptoboss Casino ждет вас прямо сейчас, пропустите другие варианты!
Проводите время с удовольствием на зеркале Cryptoboss Casino!, забирайте джекпот!
Без зеркала Cryptoboss Casino никуда!, получайте удовольствие без лишних хлопот!
криптобосс зеркало рабочее криптобосс зеркало cryptoboss ru casino .
Do you have any video of that? I’d want to find out some additional information.
What a data of un-ambiguity and preserveness of
precious familiarity concerning unexpected feelings.
Электромобиль Zeekr X, который Вы можете заказать у нас на сайте. Что касается внешнего вида, который подчеркивается светодиодными фарами с интеллектуальной матрицей, которые исчезают за решеткой радиатора китайский электромобиль zeekr 001 цена
Nice post. I learn something totally new and challenging on sites I stumbleupon on a daily basis.
It will always be helpful to read through articles from other
writers and use something from their websites.
Купить новый авто из Китая от официального дилера. Специальные цены на все марки модельного ряда китайских автомобилей в автосалоне l9
A property management company along with local know-how will certainly not only assist you remain certified but additionally assist you on maximizing rental profit and staying away from expensive oversights. Their local know-how ensures you are actually adhering to all regulations and getting the greatest return on your financial investment, https://www.tumblr.com/catarinalee-sfpc/761575897665060865/excatly-why-expats-and-real-estate-investors-are?source=share.
Сегодня технологии достигли нового уровня, и искусственный интеллект становится неотъемлемой частью нашей повседневной жизни. Системы обработки информации способны понимать и генерировать текст, взаимодействуя с пользователями на интуитивном уровне http://psicolinguistica.letras.ufmg.br/wiki/index.php?title=%20%D0%9A%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C%20%D0%B4%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D1%81%D0%B5%D1%82%D0%B8:%20%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20%D0%B4%D0%BB%D1%8F%20%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B8%D1%85
Если вы или ваши близкие нуждаются в помощи, не откладывайте обращение за профессиональной поддержкой. Свяжитесь с нами сегодня, чтобы начать путь к выздоровлению и лечение от алкоголизма в Алматы https://alco-help-almaty.kz/
Aptechka Online – это уникальный интернет-ресурс, предоставляющий отзывы о лекарствах, таких как Ксефокам, и популярных лекарственных средствах. На сайте Аптечка Онлайн пользователи могут ознакомиться с детальными инструкциями о таких средствах, как Урсодез, побочных эффектах и сравнить различные медикаменты для профилактики.
Аптечка Онлайн также предоставляет читателям возможность ознакомиться с рекомендациями о различных лекарственных средствах, таких как Ксефокам. Эти отзывы помогают понять, какое лекарство будет наиболее эффективным в конкретном случае. Кроме того, на сайте представлено сравнение аналогов, что облегчает выбор более выгодных вариантов.
Благодаря удобной структуре на сайте Аптечка Онлайн, пользователи могут быстро найти нужную информацию, будь то описание действия или противопоказания. Это делает справочник незаменимым помощником для тех, кто заботится о своем здоровье.
Aptechka Online предлагает подробные инструкции по применению лекарств, таких как Ксефокам, что помогает читателям лучше понять, как использовать средства для профилактики различных состояний. На сайте также можно найти актуальные данные о показаниях и возможных реакциях, что важно для эффективного применения.
Дополнительно, Aptechka Online предлагает обзоры по сравнению аналогов, таких как Флебодиа. Это помогает пользователям принимать информированные решения и находить более доступные варианты лекарственных препаратов, не теряя при этом в качестве.
Организация вправе внедрить требования ISO 9001, применив их в своей системе менеджмента качества, но при этом получение сертификата не является обязательным. Решение о прохождении сертификации и получении сертификата соответствия является добровольным решением компании https://www.behance.net/gallery/207983899/otkaznoe-pismo