Python3.7学习笔记21-第三方模块。 一般在安装完成python3之后。不能直接引用需要自己手动安装的模块我们可以认为它是第三方模块。安装方法有如下几种。
- 直接在终端输入 pip3 install 模块名字 (因为资源的服务器是国外有的时候下载会超时,重新下载安装即刻)
- 直接去官网下载对应的文件解压。然后执行python3 setup.py 文件
- 如果是用pycharm编辑器。可以先输入类名然后快捷键点击它会弹出安装的提示,也可以直接在编辑器搜索模块来安装
我们常用的有很多。我们简单介绍几个
一、xlrd 模块
xlrd 模块主要功能是获取表格的数据
import xlrd
data = xlrd.open_workbook('/home/test.xlsx') # 打开文件
table = data.sheets()[0] # 根据索引选取那个页面。索引0,1,2,3。。。对应表格从左往右的工作表
table1 = data.sheet_by_index(0) # 根据索引选取那个页面。索引0,1,2,3。。。对应表格从左往右的工作表
table2 = data.sheet_by_name('Sheet1') # 根据工作表的名称来获取
names = data.sheet_names() # 返回所有工作表名称
# 行操作
nrows = table.nrows # 获取工作表所有的有效行数
table.row(0) # 返回由该行中所有的单元格对象组成的列表
table.row_slice(0) #返回由该列中所有的单元格对象组成的列表
table.row_types(0, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据类型组成的列表
table.row_values(0, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据组成的列表
table.row_len(0) #返回该列的有效单元格长度
# 列操作
ncols = table.ncols #获取列表的有效列数
table.col(1, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表
table.col_slice(1, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表
table.col_types(1, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据类型组成的列表
table.col_values(1, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据组成的列表
# 单元格操作。表格读取的时候。原点是表格左上角坐标0,0 然后整个表格是直角坐标系的第一象限
table.cell('横坐标','纵坐标') #返回单元格对象
table.cell_type('横坐标','纵坐标') #返回单元格中的数据类型
table.cell_value('横坐标','纵坐标') #返回单元格中的数据
- 之前根据自己项目需求整理如下。单纯的获取文件内容没有过多功能
class ExcelXlrd:
"""
获取表格内容并返回嵌套列表
"""
def __init__(self, path_name):
"""
实例化参数
:param path_name: 文件路径
"""
self.path_name = path_name
self.__example()
def __example(self):
"""
实例化表格对象 以及所有的标签名
:return:
"""
self.open = xlrd.open_workbook(self.path_name)
self.sheet_name_all = self.open.sheet_names()
def get_data(self,i=0):
"""
获取表格数据并返回
:param i: 标签的坐标位置 第一页=0 第二页=1......
:return:
"""
# 获取表格横纵的数据
self.sheet_text = self.open.sheet_by_index(i)
self.nrows = self.sheet_text.nrows
self.ncols = self.sheet_text.ncols
# 按照预期的数据格式循环获取
res_list =[]
for m in range(self.nrows):
ncols_list = []
for n in range(self.ncols):
if self.sheet_text.cell(m,n).ctype == 3: # 如果是日期要转化成正常的
ncols_list.append(str(datetime(*xldate_as_tuple(self.sheet_text.cell_value(m,n), 0))))
else:
ncols_list.append(self.sheet_text.cell(m,n).value)
res_list.append(ncols_list)
return res_list
二、xlwt 模块
xlwt主要是操作数据写入表格
- 主要功能是写入数据的格式和整合单元格
import xlwt
def set_style(name, height, bold=False, format_str='', align='center'):
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = name # 'Times New Roman'
font.bold = bold
font.height = height
borders = xlwt.Borders() # 为样式创建边框
borders.left = 2
borders.right = 2
borders.top = 0
borders.bottom = 2
alignment = xlwt.Alignment() # 设置排列
if align == 'center':
alignment.horz = xlwt.Alignment.HORZ_CENTER
alignment.vert = xlwt.Alignment.VERT_CENTER
else:
alignment.horz = xlwt.Alignment.HORZ_LEFT
alignment.vert = xlwt.Alignment.VERT_BOTTOM
style.font = font
style.borders = borders
style.num_format_str = format_str
style.alignment = alignment
return style
wb = xlwt.Workbook()
ws = wb.add_sheet('人事信息表', cell_overwrite_ok=True) # 增加sheet
rows = ['公司名称', '姓名', '部门', '电话', '入职日期', '手机', '邮箱']
col1 = ['测试1', '测试2', '测试3']
col2 = ['18211112222', '18211112223', '18211112224']
col3 = ['2020-05-01', '2020-05-02', '2020-05-03']
# 写第一行数据
ws.write_merge(
0,
0,
0,
6,
'人事信息表',
set_style(
'Times New Roman',
320,
bold=True,
format_str='')) # 合并单元格
styleOK = xlwt.easyxf()
pattern = xlwt.Pattern() # 一个实例化的样式类
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 固定的样式
pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow'] # 背景颜色
borders = xlwt.Borders() # 为样式创建边框
borders.left = 2
borders.right = 2
borders.top = 6
borders.bottom = 2
font = xlwt.Font() # 为样式创建字体
font.name = 'Times New Roman'
font.bold = True
font.height = 220
styleOK.pattern = pattern
styleOK.borders = borders
styleOK.font = font
# 写第二行数据
for index, val in enumerate(rows):
ws.col(index).width = 150 * 30 # 定义列宽
ws.write(1, index, val, style=styleOK)
# 写第3行-6行第一列数据
ws.write_merge(
2,
2 + len(col1) - 1,
0,
0,
'杭州公司',
set_style(
'Times New Roman',
320,
bold=True,
format_str='')) # 合并单元格
# 从第3行开始写1列数据
for index, val in enumerate(col1):
ws.col(1).width = 150 * 30 # 定义列宽
ws.write(index + 2, 1, val, style=set_style('Times New Roman',
200,
bold=False,
format_str='', align=''))
# 从第3行开始写4列数据
for index, val in enumerate(col2):
ws.col(3).width = 150 * 30 # 定义列宽
ws.write(index + 2, 3, val, style=set_style('Times New Roman',
200,
bold=False,
format_str='', align=''))
# 从第3行开始写5列数据
for index, val in enumerate(col3):
ws.col(4).width = 150 * 30 # 定义列宽
ws.write(index + 2, 4, val, style=set_style('Times New Roman',
200,
bold=False,
format_str='', align=''))
ws.write(2, 2, '前端开发部门', style=styleOK)
ws.write(3, 2, '测试部门', style=styleOK)
ws.write(4, 2, '后台开发部门', style=styleOK)
ws.write(2, 5, '186777233', style=styleOK)
ws.write(3, 5, '186777233', style=styleOK)
ws.write(4, 5, '186777233', style=styleOK)
wb.save('test.xls') # 保存xls
- 之前写的项目涉及这块的整理成了类。单纯的按照固定格式写入数据。
# -*- coding: utf-8 -*-
# @Time : 2020-03-03 09:36
# @Author : zhonglinglong
# @File : excel_xlwt.py
"""
把数据写入到新建的表格
1、支持新建表格并写入数据
2、支持不同的数据写入不同的页签
3、支持对同一个页签进行重写 不过对次数要清0 self.number=0
"""
import xlwt
class ExcelXlwt:
"""
新建多页签表格并写入数据
"""
def __init__(self,path_name,font_name='Times New Roman',height=220,bold=True):
"""
:param path_name: 新建表格的名称默认当前路径
:param font_name: 文字字体
:param height:文字高度
:param bold:文字加粗
"""
self.path_name = path_name
self.font_name = font_name
self.height = height
self.bold = bold
# 初始化页签的数量
self.number = 0
self._example()
def _example(self):
"""
初始化参数和实例化对象
:return:
"""
self.write = xlwt.Workbook()
self.sheet_obj_list = []
def create_sheet(self,sheet_name):
"""
追加页签对象
:param sheet_name: 页签名称
:return:
"""
try:
self.sheet_obj_list.append(self.write.add_sheet(sheet_name,cell_overwrite_ok=True))
return
except:
return '表格页签不允许重名'
def _set_style(self):
"""
文字格式
:return:
"""
style = xlwt.XFStyle()
font = xlwt.Font() # 创建字体
font.bold = self.bold
font.color_index = 4
font.height = self.height
font.name = self.font_name
style.font = font
return style
def set_excel(self,data,sheet_name):
"""
数据写入表格
:param data: 被写入的数据
:param sheet_name: 数据存放的页签名
:return:
"""
assert type(data) == list
result = self.create_sheet(sheet_name)
# 数据按照对应的标签页循环写入
for i in range(len(data)):
if i != 0:
self.bold = False
for j in range(len(data[i])):
try:
self.sheet_obj_list[self.number].write(i,j,data[i][j],self._set_style())
except Exception as e:
return e
# 每次写入一个标签页再次调用将进入下一个页签
self.number = self.number + 1
return result
def save_excel(self):
"""
保存表格
:return:
"""
self.write.save(self.path_name)
三、mysql 模块
mysql 模块主要是连接数据库。增删改查
"""
整理成自己常用的
1、连接数据库及断开连接释放资源
2、增改查操作以及返回结果
使用方式如下。主要是为了确保不管是否异常。都断开数据库。
with MySql('host','user','password','port','db') as test:
sql = 'SELECT * FROM srdz.finance where id=99'
test.select(sql)
"""
import pymysql
class MySql:
def __init__(self, host, user, password, port, db):
"""
初始化参数值
:param host: 地址
:param user: 账号
:param password: 密码
:param port: 端口号
:param db: 数据库名称
"""
self.host = host
self.user = user
self.password = password
self.port = int(port)
self.db = db
self.value = True
def __enter__(self):
"""
连接数据库 返回实例化对象
:return:
"""
try:
self.sqlConn = pymysql.connect(
host=self.host,
user=self.user,
password=self.password,
db=self.db,
charset="utf8",
port=self.port)
self.sqlCursor = self.sqlConn.cursor()
except Exception as e:
self.value = False
self.err = e
return self
return self
def __exit__(self, exc_type, exc_val, exc_tb):
"""
关闭数据库连接释放资源
:param exc_type:
:param exc_val:
:param exc_tb:
:return:
"""
try:
self.sqlCursor.close()
except:
pass
def select(self,sql):
"""
查询数据
:param sql:
:return: 正常返回=[{},{},{}.....] 异常直接返回错误信息
"""
if self.value:
try:
self.sqlCursor.execute(sql)
cur = self.sqlCursor.description # 查询返回值的字段名称
result = self.sqlCursor.fetchall() # 查询返回的值
except BaseException as e:
return e
data = []
# 把查询结果值解析成预期数据类型的格式
try:
for i in range(len(result)):
lie = {}
for j in range(len(cur)):
lie[cur[j][0]] = result[i][j]
data.append(lie)
except BaseException as e:
return e
return data
else:
return self.err
def update(self,sql):
"""
更新数据
:param sql:
:return:
"""
try:
# 执行SQL语句
self.sqlCursor.execute(sql)
# 提交到数据库执行
self.sqlConn.commit()
except BaseException as e:
# 发生错误时回滚
self.sqlConn.rollback()
return e
return
def insert(self,sql):
"""
新增数据
:param sql:
:return:
"""
try:
self.sqlCursor.execute(sql)
self.sqlConn.commit()
except BaseException as e:
self.sqlConn.rollback()
return e
return
四、dingtalkchatbot 模块
钉钉发消息。只整理了最简单的发送文字消息。如果要发送图片或者其他功能请参考钉钉给出的API接口文档
import dingtalkchatbot.chatbot as cb
class dingRobot:
def __init__(self,url,phone,msg):
self.url = url
self.phone = phone.split(',')
self.msg = msg
def ding_send(self):
xiaoding = cb.DingtalkChatbot(self.url)
xiaoding.send_text(msg=self.msg,at_mobiles=self.phone)
还有很多很多第三方非常使用的。在后面的学习中用到之后在慢慢整理