前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3外置模块使用

Python3外置模块使用

作者头像
全栈工程师修炼指南
发布2020-10-23 16:05:37
4.6K0
发布2020-10-23 16:05:37
举报

[TOC]

0x00 快速入门

(1)外置模块一览表 描述:Python外置模块可以说是Python的强大之处的存在,使得Python语言扩展性高,使用方法众多并且使用也非常简单,在我们日常的运维开发学习中尤为重要;

代码语言:javascript
复制
#>>>dir(random)  #查看与使用模块里的函数,前提必须引入模块,高阶用法 import 引入模块 as 模块别名;
#>>>help(random) #模块帮助
import urllib    #网站请求模块
import lxml      #xpath解析库模块 from lxml import etree

#表格Excel处理
import cvs       #cvs表格模块
import xlwt      #excel表格模块
import xlsxwriter #excel文件模块


#其他文章中介绍
import psutil    #系统性能信息模块
import exifread   #图片exif信息模块
import ruamel.yaml #YAML解析模块
import dnspython   #DNS解析信息模块
import pycurl      #web探测模块
0x01 外置模块详解
urllib 模块

urllib是一个包,下面有4个modules,主要进行网页请求; 文档地址 urllib.request 用于打开和读取url urllib.error 包含由urllib.request引发的异常 (URLERROR(请求异常) -> HTTPERROR(网页响应码异常300~599)) urllib.parse 解析url urllib.robotparser 用于解析robots.txt文件

案例:

代码语言:javascript
复制
#语法
urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)  #返回request配置请求的对象
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) #进行网站的请求

urllib.request.ProxyHandler(proxies=None)  # 设置代理地址创建Proxyhandler 参数是一个字典 {'类型':'代理IP:端口'} 返回handler
urllib.request.build_opener([handler, ...])  # 创建Opener绑定代理资源,返回安装 opener开启工具对象
urllib.request.install_opener(opener)         #安装Opener

#POST requestThe data argument must be a bytes object in standard application/x-www-form-urlencoded format; 
urllib.parse.urlencode(data, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus) 

urllib.parse.quote("网络安全")  #解析中文URL

#案例
import urllib.request
import urllib.error

url = "http://weiyigeek.github.io"

data = {'action':'postValue'} #设置post请求参数
data = urllib.parse.urlencode(data).encode('utf-8')  #等同于:application/x-www-form-urlencoded; charset=UTF-8 

req = urllib.request.Request(url, data)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0') #设置请求头

#-----------------------------------------------------#
try:
        res = urllib.request.urlopen("https://weiyigeek.github.io",context=ssl._create_unverified_context())  #支持SSL请求
        print("请求URL:\n",res.geturl())
        print("状态码:",res.getcode())
        print("返回消息头:\n",res.info())
        print("请求头信息:",req.headers)   #注意这里是 Request() 类方法返回的对象
except HTTPError as e:  #【注意】HTTPError 必须在URLError之上
        print("服务器响应出错:",e.code)
        print("打印出具体的错误页面",e.read().encode('utf-8'))
except URLError as e: # 包含了HTTPError
        print("服务器链接失败:",e.reason)
else:
        print("请求成功!")

############ 执行结果 ########################
# 请求URL:http://weiyigeek.github.io
# 状态码: 200
# 返回消息头:
# Server: nginx/1.15.9
# Date: Fri, 12 Apr 2019 10:57:51 GMT
# Content-Type: text/html; charset=utf-8
# Content-Length: 15278
# Last-Modified: Wed, 10 Apr 2019 01:12:59 GMT
# Connection: close
# ETag: "5cad431b-3bae"
# Accept-Ranges: bytes

# 请求头信息: {'User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0'}
lxml 模块

使用xpath 必须首先下载lxml 库,xpath 只是一个元素选择器在python 的另外一个库lxml 中; 参考:https://cuiqingcai.com/2621.html

代码语言:javascript
复制
#使用pip进行下载lxml库
pip install lxml
from lxml import etree
##省略若干代码,dom_tree为我们解析之后的etree对象、
dom_tree = etree.HTML(html)
##语句一:
dom_tree.xpath('/html/body/div/a/@href')
##语句二:
dom_tree.xpath('//div/a/@href')
##语句二:
dom_tree.xpath('//div[@class="info-co"]/a/@href') 利用class属性
dom_tree.xpath('//div/a/@href') #将返回所有的链接网址
dom_tree.xpath('//div/a/text()') #将获取所有链接的名称

实际案例:

代码语言:javascript
复制
#获取到request请求网站的html
dom_tree = etree.HTML(html)
links = dom_tree.xpath("//div/span[@class='info-col row2-text']/a") #返回一个xpath对象

for i in links:
    print(i.text)

for index in range(len(links_yaoshi)): 
    print(index) 
    print(links[index].text) 
    print(links_yaoshi[index].text) 
    print(links_danjia[index].text)


# 一定注意 xpath 查找提取结果是可以用“|”来提取多个results, 所以最终的code 如下:
data = dom_tree.xpath("//div[@class='info-table']/li") 
info = data[0].xpath('string(.)').extract()[0] 
print(data[0].xpath('string(.)').strip())  # 只是打印第一行的结果

#值得学习
dataRes = dom_tree.xpath("//div/span[@class='info-col row2-text']/a | //div/span[@class='c-prop-tag2'] | //span[@class='info-col price-item minor']")
0x02 表格数据处理
csv 模块

(1) csv.reader : 读取csv文件,返回的是迭代类型 (2) csv.writer(IO,dialect,delimiter):设置写入csv文件的模板 (3) DictReader:也是读取CSV文件,返回字典类型 (4) DictWriter:写入字典到CSV文件 (5) writerow:csv文件插入一行数据,把下面列表中的每一项放入一个单元格

案例:

代码语言:javascript
复制
#!/usr/bin/python3
#python3使用csv模块读写csv文件

import csv

#案例1:输出数据写入CSV文件
data = [
    ("Mike", "male", 24),
    ("Lee", "male", 26),
    ("Joy", "female", 22)
]
data1 = [[x] for x in range(10) if x % 2 == 0]
data2 = ['测试','w','我是中文']  #字符间以,分割

#打开文件并设置模式用with打开可以不用去特意关闭file了
#Python3.4以后的新方式,解决空行问题
with open('demo.csv','w+',newline='',encoding='utf-8') as csvfile:
    # dialect为打开csv文件的方式,默认是excel,delimiter="\t"参数指写入的时候的分隔符
    csvwriter = csv.writer(csvfile,dialect=("excel"),delimiter=',')
    for each in data:
        print(">>>",each)
        csvwriter.writerow(each)
    
    csvwriter.writerow(data2) #写入一行之中
        
  #csv文件插入一行数据,把下面列表中的每一项放入一个单元格(可以用循环插入多行)
     csvwriter.writerow(["A","B","C","D"])
     
#案例2:打开csv文件读取数据
with open('demo.csv','r+',encoding='utf-8') as f:
    res = csv.reader(f)
    for x in res:
        print(x[0])
        
#csv中有三列数据,遍历读取时使用三个变量分别对应
for title, year, director in reader:
  list.append(year)
  print(title, "; ",  year , "; ",  director)
  
with open("test.csv", "r", encoding = "utf-8") as f:
    reader = csv.DictReader(f)  #读取字典对象
    column = [row for row in reader]
    
>python demo6.1.py
>>> ('Mike', 'male', 24)
>>> ('Lee', 'male', 26)
>>> ('Joy', 'female', 22)
Mike
Lee
Joy
测试
xlwt 模块

描述:对于execl表格数据的读取和写入插入删除等等,支丰富的计函数以及图表; 官网下载:http://pypi.python.org/pypi/xlwt

基础方法:

代码语言:javascript
复制
xlwt.Workbook(encoding = '编码格式')
workbook.add_sheet('表名称') 
worksheet.write(0, 0, "写数据")
workbook.save('存储文件名称')

实际案例:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import xlwt
def main():
    workbook = xlwt.Workbook(encoding='utf-8')  #创建workbook
    worksheet = workbook.add_sheet('sheet名称')  #创建workbook

    #从0开始插入
    worksheet.write(0, 0, 'Hello')  # write_string()
    worksheet.write(1, 0, 'World')  # write_string()
    worksheet.write(2, 0, 2)  # write_number()
    worksheet.write(3, 0, 3.00001)  # write_number()
    worksheet.write(4, 0, '=SIN(PI()/4)')  # write_formula()
    worksheet.write(5, 0, '')  # write_blank()
    worksheet.write(6, 0, None)  # write_blank()

    linenum = 7
    #采用二维数组确定为主,往单元格内写入内容
    worksheet.write(linenum, 0, "ID")
    worksheet.write(linenum, 1, "根域名")
    worksheet.write(linenum, 2, "绑定邮箱")
    worksheet.write(linenum, 3, "DNS服务器1")
    worksheet.write(linenum, 4, "DNS服务器2")
    worksheet.write(linenum, 5, "状态")

    #保存excel文档
    workbook.save('Excel_Workbook.xls')

    print("写入完成!")

if __name__ == '__main__':
    main()
WeiyiGeek.excel表格处理
WeiyiGeek.excel表格处理

WeiyiGeek.excel表格处理

xlsxwriter 模块

描述:操作EXCEL的xlsxwriterm模块,可以操作多个工作表的文字/数字/公式和图表等;

模块特点:

  • 兼容性Exce文件支持Excel2003/2007等版本,支持所有Excel单元格格式
  • 可以进行单元格合并/批注/自动筛选,丰富多格式字符串等等
  • 支持共组吧PNG/jpg图像,自定义图表
  • 内存优化模式支持写入大文件

模块安装:

代码语言:javascript
复制
pip3 install xlsxwriter

#使用流程
1.创建excel文件对象
2.创建工作表对象
3.创建图表对象
4.定义excel的format格式对象

模块方法:

代码语言:javascript
复制
#1.workbook类
obj=Class.Workbook(filename[,options])  #该类创建一个XlsxWriter的Workbook对象,options为dict类型是可选参数,一般作为初始化工作表内容格式
worksheet=obj.dd_worksheet([sheetname])  #方法用于添加一个新的工作表,sheetname为工作表名称,默认是sheet1
format=obj.add_format([properties])  #方法用于在工作表中创建一个新的格式对象来格式化单元格 bold/normal
format.set_border(1) #定义format对象单元格边框加粗(1像素)的格式
format.set_bg_color('#999999') #定义对象的背景演示
format.set_blod()  #显示粗体
format.set_num_format('0.00') #定义单元格边框加粗1像素的格式;
format.set_align('center')

chart=obj.add_chart(options)  #用于在工作表中创建一个图表对象,内部是通过insert_chart()方法来实现的,参数为dict类型是为图标指定一个字典属性
obj.close()  #作用是关闭工作表文件
代码语言:javascript
复制
#2.Worksheet类:
#Worksheet对象不能直接实例化,而是通过Workbook对象调用add_worksheet()方法来创建,代表一个excel工作表,是比较核心的一个类

worksheet.write(row, col, *args) #是用来将普通数据写入单元格中。
#简化不同数据类型的写入过程,write方法已作为其他更加具体的数据类型方法的别名
write_row('A1',写入的数据(单个字符/数组),格式化类型)  #从A1开始写入一行
write_cloumn('A2',写入的数据(单个字符/数组),格式化类型)  #从A2开始写入一列)
write_string():写入字符串类型数据   
wirte_number():写入数字型数据    
write_blank():写入空类型数据    
write_formula():写入公式型数据   
write_datetime():写入日期型数据   
wirte_boolean():写入逻辑型数据    
write_url():写入超链接型数据


worksheet.set_row(row, height, cell_format, options) #用于设定行单元格的属性。
#options字典类型,设置行hidden(隐藏)、level(组合分级)、collpsed(折叠)

worksheet.set_column(first_col, last_col, width, cell_format, options) #用于设置一列或多列单元格的属性

worksheet.insert_image(row, col, image[, options]) #用于插入图片到指定的单元格,支持PNG,JPEG,BMP等多种格式以及指定图片位置/比例/连接URL信息。
代码语言:javascript
复制
#3.chart类实图表组件,支持包括面积、条形图、柱状图、折线图、散点图等
#一个图表对象是通过Workbook的add_chart方法创建,通过{type, ‘图表类型’}字典来制定图表类型
workbook.add_char({'type':"column"})
area:面积样式的图表
bar:条形图
column:柱状图
line:线条样式的图表
pie:饼形图
scatter:散点图
stock:股票样式的图表
radar:雷达样式的图表

#插入到指定位置
chart.add_series(options) #用于添加一个数据系列的图表参数options为字典类型,用于设置图表系列选项的字典
#常用方法:
categories:设置图表类别标签范围;
values:设置图表数据范围;
line:设置图表线条属性,包括宽度、颜色等;
name: "引用为图例表-即右方的柱形说明图"


#其他常用方法展示
chart.set_y_axis(options) #设置图表y轴小标题
chart.set_x_axis(options) #设置图表X轴小标题
# name:设置x轴名称
# name_font:设置x轴字体
# num_font:设置x轴数字字体属性;

chart.set_size(options)  #设置图标大小{'width':'1024','height':768}
chart.set_title(options)#设置图表上方标题,参数options为字典类型,、用于设置图表系列选项的字典
chart.set_style(style_id)#用于设置图表样式,style_id为不同数字代表不同样式
chart.set_table(options) #设置x轴为数据表格式形式
worksheet.insert_chart(row,col,chartObj) #将设置的图表插入到工作簿中

简单示例

代码语言:javascript
复制
workbook = xlsxwriter.Workbook('Chart.xlsx') 
worksheet =workbook.add_worksheet() 
chart = workbook.add_chart({'type':'cloumn'})

format1 = workbook.add_format()
format1.set_border(1)

format2 = workbook.add_format()
format2.set_align('center')

worksheet.write_row('A1',写入的数据(单个字符/数组),format1)  #从A1开始写入一行
worksheet.write_cloumn('A2',写入的数据(单个字符/数组),format2)  #从A2开始写入一列)

for i in range(2,7)
    worksheet.write_formula('I'+i,'=AVERAGE(B'+i+':H'+i+')'.format1)  #从B2:H2的平均数
    #对于图表添加数据也是一样的(重点之处)
    chart.add_series({
        'categories': '=Sheet1!B1:H1', #将作为图表x轴柱形下方说明
        'values': '=Sheet1!$B$'+i+':$H$'+1, #图表数据区域赋值
        'line': {'color': 'black'},
        'name': u'引用为图例表-即右方的柱形说明图', #默认为系列1
    })

chart.set_x_axis({'name':u' 星期数 '})
chart.set_y_axis({'name':u' Mb/s '})

worksheet.insert_chart('AB', chart)
workbook.close() #关闭文档

模块示例:

代码语言:javascript
复制
#!/usr/bin/env python
# coding=utf-8
import xlsxwriter

#创建一个新的Excel文件并添加工作表
workbook = xlsxwriter.Workbook('demo.xlsx')     #创建工作簿

#创建一个新的工作簿
worksheet1 = workbook.add_worksheet()            #创建工作表 sheet1(默认表名称)
worksheet2 = workbook.add_worksheet('testSheet2') #创建工作表 testsheet2

#在工作表中创建一个新的格式对象来格式化单元格,实现加粗
bold = workbook.add_format({'bold': True})    #方式1
bold = workbook.add_format();bold.set_bold()  #方式2


#数据写入到工作簿之中,注意:两种方式实际是一种只是别名而已可以采用 A1 和 (0,0) 方式定位
worksheet.write('A1', 'Hello')        #总表写入简单文本
worksheet.write_string(0,1, 'World')  #总表写入简单文本字符串类型数据

worksheet.write('A2', 123.456)        #写入数字类型数据
worksheet.write_number(1, 1, 123456)    #按照坐标写入

worksheet.write('A3', None)             #写入空数据类型
worksheet.write_blank(2,1, '')       #写入空数据类型

worksheet.write('A4', '=SUM(A1:B2)')       #写入公式型数据 
worksheet.write_formula(3,1, '=SIN(PI()/4)')    

worksheet.write('A5', datetime.datetime.strftime('2019-08-09','y%-m%-d%'),workbook.add_format({'num_format': 'yyyy-mm-dd'}))       #写入日期型数据 
worksheet.write_datatime(4,1,datetime.datetime.strftime('2019-08-09','y%-m%-d%'),workbook.add_format({'num_format': 'yyyy-mm-dd'}))

worksheet.write('A6', True)       #写入逻辑类型数据
worksheet.write_boolean(5,1, False)      

worksheet.write('A7', 'http://baidu.com')         #写入超链接数据类型
worksheet.write_url(6,1, 'http://www.python.org')   


#设置一列或者多列单元属性
worksheet1.set_column(0, 1, 10, bold)   #设定列A到B单元格宽度10像素加粗
worksheet1.set_column('C:D', 20)  # 设置C到D单元格宽度20像素  
worksheet1.set_column('E:G', None, None, {'hidden': 1}) #隐藏E到G单元格 


#设置一行或者多行单元属性
worksheet1.set_row(0, 30,bold)   #设置都1行单元个高度30像素定义加粗
worksheet1.set_row(1, 30,workbook,add_format({'italic':True}))   #设置都1行单元个高度30像素定义斜体
worksheet1.set_row(6, None, None, {'hidden': 1}) #隐藏第6行


#在第二个单元簿地单元格插入python-logo.png图片超链接为http://python.org 
worksheet2.insert_image('A1', 'python-logo.jpg', {'url': 'http://python.org'})
worksheet2.insert_image('A3', 'python-logo.jpg')   #插入图片


#Char类图表示例
chart = workbook.addchart({type,'column'}) #创建一个column(柱形)图标

#为图表添加数据
chart.add_series({ 
    'categories': '=testSheet2!$A$1:$A$5',    
    'values': '=testSheet2!$B$1:$B3', 
    'line': {'color': 'red'},
    'name': 
})

#设置图表X轴显示
chart.set_x_axis({
    'name': 'x name',
    'name_font': {'size': 14, 'bold': True}
    'num_font': {'italic': True}
})

#设置x轴为数据表格式
chart.set_table()

#图表大小
chart.set_size({'width': 720, 'height': 576})
#图表标题
chart.set_title({'name':"Table Title Demo"})

#图表样式
chart.set_style(37)

#插入图表到工作簿中
worksheet2.insert_chart('A7', chart)

workbook.close()    #关闭工作薄
WeiyiGeek.
WeiyiGeek.

WeiyiGeek.

0x04 文件转换
1.PDFMiner模块

PDFMiner是一个专注于从PDF文档中提取、分析文本信息的工具。它不仅可以获取特定页码特定位置处的信息,也能获得字体等信息。

安装模块说明:

代码语言:javascript
复制
#首先安装PDFMiner,注意Python3要安装pdfminer3k
#Windows下面安装pdfminer3k
pip install pdfminer3k

#Linux下面安装pdfminer
pip install pdfminer

工作原理图:

WeiyiGeek.
WeiyiGeek.

WeiyiGeek.

解析pdf文件用到的类:

  • PDFParser:从一个文件中获取数据
  • PDFDocument:保存获取的数据,和PDFParser是相互关联的
  • PDFPageInterpreter: 处理页面内容
  • PDFDevice : 将其翻译成你需要的格式
  • PDFResourceManager : 用于存储共享资源,如字体或图像。

Layout布局分析返回的PDF文档中的每个页面LTPage对象。这个对象和页内包含的子对象形成一个树结构。 如图所示:

WeiyiGeek.
WeiyiGeek.

LTPage :表示整个页可能会含有LTTextBox,LTFigure,LTImage,LTRect,LTCurve和LTLine子对象。

  • LTTextBox:表示一组文本块可能包含在一个矩形区域。注意此box是由几何分析中创建,并且不一定表示该文本的一个逻辑边界。它包含LTTextLine对象的列表。使用 get_text()方法返回文本内容。
  • LTTextLine :包含表示单个文本行LTChar对象的列表。字符对齐要么水平或垂直,取决于文本的写入模式。使用get_text()方法返回文本内容。
  • LTAnno:在文本中字母实际上被表示为Unicode字符串。需要注意的是,虽然一个LTChar对象具有实际边界,LTAnno对象没有,因为这些是“虚拟”的字符,根据两个字符间的关系(例如,一个空格)由布局分析后插入。
  • LTImage:表示一个图像对象。嵌入式图像可以是JPEG或其它格式,但是目前PDFMiner没有放置太多精力在图形对象。
  • LTLine:代表一条直线。可用于分离文本或附图。
  • LTRect:表示矩形。可用于框架的另一图片或数字。
  • LTCurve:表示一个通用的Bezier曲线
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 快速入门
  • 0x01 外置模块详解
    • urllib 模块
      • lxml 模块
      • 0x02 表格数据处理
        • csv 模块
          • xlwt 模块
            • xlsxwriter 模块
            • 0x04 文件转换
              • 1.PDFMiner模块
              相关产品与服务
              文件存储
              文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档