二十一、第三方模块

第三方模块。

一般在安装完成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)

还有很多很多第三方非常使用的。在后面的学习中用到之后在慢慢整理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bug来袭~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值