Python第三方模块(自用)

Python第三方模块

一、openpyxl模块

读取表格簿

openpyxl模块用于处理execel表格数据。

>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> type(wb)
<class 'openpyxl.workbook.workbook.Workbook'>

openpyxl.load_workbook()函数接收文件名,并返回一个workbook数据类型的值。这个Workbook对象代表这个Execl文件。

要记住,example.xlsl必须在当前工作目录中。

取得表名称

使用sheetnames属性可以取得工作簿中所有表名的列表。

>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> wb.sheetnames
['Sheet1', 'Sheet2', 'Sheet3']
>>> sheet = wb['Sheet3']
>>> type(sheet)
<class 'openpyxl.worksheet.worksheet.Worksheet'>
>>> sheet.title
'Sheet3'
>>> anotherSheet = wb.active
>>> anotherSheet
<Worksheet "Sheet1">

可使用Workbook对象的active属性来取得工作簿的活动表。在取得Worksheet对象后,可以通过title属性取得它的名称。

从表中取得单元格

有了Worhsheet对象后,就可以按名字访问Cell对象。

>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb['Sheet1']
>>> sheet['A1'].value
'4/5/2015 1:34:02 PM'
>>> c = sheet['B1']
>>> c.value
'Apples'
>>> 'Row %s, Column %s is %s' % (c.row, c.column, c.value)
'Row 1, Column 2 is Apples'
>>> 'Cell %s is %s' % (c.coordinate, c.value)
'Cell B1 is Apples'
>>> sheet['C1'].value
73

Cell对象有一个value属性,它包含这个单元格中保存的值。Cell对象也有row、column和coordinate属性,额可以提供该单元格的位置信息。

>>> sheet.cell(row=1, column=2)
<Cell 'Sheet1'.B1>
>>> sheet.cell(row=1, column=2).value
'Apples'
>>> for i in range(1, 8, 2):
        print(i, sheet.cell(row=i, column=2).value)
1 Apples
3 Pears
5 Apples
7 Strawberries

可以通过Worksheet对象的max_row和max_column属性来确定表的大小。

>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb['Sheet1']
>>> sheet.max_row
8
>>> sheet.max_column
4

请注意,max_column属性是一个整数,而不是Excel中出现的字母。

列字母和数字之间的转换

要从字母转换到数字,就调用openpyxl.utils.column_index_from_string()函数。

要从数字转换到字母,就调用openpyxl.utils.get_column_letter()函数。

>>> import openpyxl
>>> from openpyxl.utils import get_column_letter, column_index_from_string
>>> get_column_letter(1)
'A'
>>> get_column_letter(900)
'AHP'
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb['Sheet1']
>>> get_column_letter(sheet.max_column)
'D'
>>> column_index_from_string('A')
1

从表中取得行和列

>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb['Sheet1']
>>> tuple(sheet['A1':'C3'])
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>), (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>), (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>))
>>> for rowOfCellObjects in sheet['A1':'C3']:
...     for cellObj in rowOfCellObjects:
...         print(cellObj.coordinate, cellObj.value)
...     print('--- END  OF  ROW ---')
A1 4/5/2015 1:34:02 PM
B1 Apples
C1 73
--- END  OF  ROW ---
A2 4/5/2015 3:41:23 AM
B2 Cherries
C2 85
--- END  OF  ROW ---
A3 4/6/2015 12:46:51 PM
B3 Pears
C3 14
--- END  OF  ROW ---

要访问特定行或列的单元格的值,也可以利用Worksheet对象的rows和columns属性。这些属性必须被list()函数转换成列表,才能使用方括号和索引。

>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb.active
>>> list(sheet.columns)[1]
(<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.B7>, <Cell 'Sheet1'.B8>)
>>> for cellObj in list(sheet.columns)[1]:
...     print(cellObj.value)
Apples
Cherries
Pears
Oranges
Apples
Bananas
Strawberries
None

写入Excel文档

创建并保存Excel文档

调用openpyxl.Workbook()函数以创建一个新的空Workbook对象。

>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> wb.sheetnames
['Sheet']
>>> sheet = wb.active
>>> sheet.title
'Sheet'
>>> sheet.title = 'Spam Bacon Eggs Sheet'
>>> wb.sheetnames
['Spam Bacon Eggs Sheet']

当修改Workbook对象或它的工作表和单元格时,电子表格文件不会保存,除非你调用save()工作簿方法。

>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb.active
>>> sheet.title = 'Spam Spam Spam'
>>> wb.save('example_copy.xlsx')

创建和删除工作表

利用create_sheet()方法和del操作符可以再工作簿中添加或删除工作表。

>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> wb.sheetnames
['Sheet']
>>> wb.create_sheet()
<Worksheet "Sheet1">
>>> wb.sheetnames
['Sheet', 'Sheet1']
>>> wb.create_sheet(index=0, title='First Sheet')
<Worksheet "First Sheet">
>>> wb.sheetnames
['First Sheet', 'Sheet', 'Sheet1']
>>> wb.create_sheet(index=2, title='Middle Sheet')
<Worksheet "Middle Sheet">
>>> wb.sheetnames
['First Sheet', 'Sheet', 'Middle Sheet', 'Sheet1']
>>> del wb['Middle Sheet']
>>> del wb['Sheet1']
>>> wb.sheetnames
['First Sheet', 'Sheet']

将值写入单元格

>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> sheet = wb['Sheet']
>>> sheet['A1'] = 'Hello, world!'
>>> sheet['A1'].value
'Hello, world!'

公式

公式以一个等号开始,可以配置单元格让它包含通过其他单元格计算得到的值。

>>> sheet['B9'] = '=SUM(B1:B8)'

调整行和列

合并和拆分单元格

利用merge_cells()工作表方法,可以将一个矩形区域中的单元格合并为一个单元格。

>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> sheet.merge_cells('A1:D3')
>>> sheet['A1'] = 'Twelve cells merged together'
>>> sheet.merger_cell('C5:D5')
>>> sheet['C5'] = 'Two merged cells'
>>> wb.save('merged.xlsx')

merge_cells()的参数是一个字符串,表示要合并的矩形区域左上角和右下角的单元格:'A1:D3'将12个单元格合并为一个单元格。

要拆分单元格,就调用unmerge_cells()工作表方法。

>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> sheet.unmerge_cells('A1:D3')
>>> sheet.unmerger_cell('C5:D5')
>>> wb.save('merged.xlsx')

图标

openpyxl支持利用工作表中单元格的数据来创建条形图、折线图、散点图和饼图。

二、paramiko模块

paramiko是一个基于SSH用于连接远程服务器并执行相关操作(SSHCline和SFTPClinet,即一个是远程连接,一个是上传/下载服务),该模块可以对远程服务器进行命令或文件操作。

paramiko模块核心组件

SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输通道及SFTPClient建立的方法,通常用于执行远程命令。

SFTPClent的作用类似于Linux的SFTP命令,是对SFTP客户端的封装,用于实现远程文件操作。

#paramiko中的几个基础名词:
1、Channel:是一种类Socket,一种安全的SSH传输通道;
2、Transport:是一种加密的会话,使用时会同步创建了一个加密的Tunnels,这个Tunnels叫做Channel;
3、Session:是Client与Server保持连接的对象,用connect()/start_client()/start_server()开始会话;

paramiko的基本使用

SSHClientS常用的方法介绍:

connect():实现远程服务器的连接与认证,对于该方法只有hostname是必传参数。

常用参数:
hostname: 连接的目标主机
port=SSH_PORT: 指定远程连接端口
username=None: 远程登录的用户名
password=None: 远程登录的用户密码
pkey=None: 私钥方式用于身份验证
key_filename=None: 一个文件或文件夹,指定私钥文件
timeout=None: 可选的TCP连接超时时间
allwo_agent=True: 是否允许连接到SSH代理,默认为True
look_for_keys=True: 是否在~./ssh中搜索私钥文件,默认为True
compress=False: 是否允许打开压缩

set_missing_host_key_policy():设置远程服务器没有在know_hosts文件中记录时的应对策略。目前支持三种策略:

设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种:
1、AutoAddPolicy: 自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立SSH连接时不需要再输入yes或no进行确认。
2、WarningPolicy: 用于记录一个位置的主机密钥的Python警告并接受,功能上和AutoAddPolicy类似,但是会提示新连接。
3、RejectPolicy: 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置,此为默认选项。

exec_command(): 在远程服务器执行Linux命令的方法。

open_sftp(): 在当前ssh会话的基础尚创建一个sftp会话,该方法会返回一个SFTPClient对象。

三、netmiko

支持多供应商库,可简化与网络设备的CLI连接。netmiko主要涉及命令输出收集并进行配置更改。该模块基于Paramiko SSH库。

目前支持的平台列表:netmiko/PLATFORMS.md at develop · ktbyers/netmiko · GitHub

参数文档:netmiko API documentation (ktbyers.github.io)

基本使用

从Netmiko库中导入"ConnectHandler"。你可以将ConnectHandler视为进入库的主要入口点。它会为您选择正确的类,基于该类创建一个netmiko对象,并建立与远程设备的SSH连接。

from netmiko import ConnectHandler

ConnectHandler相关参数:

net_connect = ConnectHandler(
   device_type="cisco_xe", #设备类型
   host="cisco5.domain.com", #设备IP地址或域名
   username="admin", #登录用户名
   password="password", #登录密码
   port: 22,  #登录端口,默认TCP/22
   timeout: 180 #超时时间,默认1秒钟
)

发送命令或更改

send_connect()

def send_command(
  self, command_string, expect_string=None, delay_factor=1.0, max_loops=500,
  auto_find_prompt=True, strip_prompt=True, strip_command=True, normalize=True, 
  use_textfsm=False, textfsm_template=None, use_ttp=False, ttp_template=None, 
  use_genie=False, cmd_verify=True)

使用基于模式的机制在 SSH 通道上执行command_string。通常用于显示命令。默认情况下,此方法将一直等待接收数据,直到检测到网络设备提示符。将自动确定当前网络设备提示。

send_connect()相关参数

command_string:要在远程设备尚执行的命令,类型为str。只能单条命令输入;
expect_string:用于确定输出结束的正则表达式。如果留空将默认为基于路由提示符。
strip_prompt:从输出中删除未遂路由器标识(默认为:True)
strip_command:从输出中删除命令的回显(默认为:True)
cmd_verify:继续操作之前验证命令回显(默认为:True)

send_command_timing()

def send_command_timing(
    self, command_string, delay_factor=1.0, 
    max_loops=150, strip_prompt=True, strip_command=True, 
    normalize=True, use_textfsm=False, textfsm_template=None, 
    use_ttp=False, ttp_template=None, use_genie=False,cmd_verify=False)

使用基于延迟的机制在 SSH 通道上执行 command_string。 一般用于显示命令。

command_string:要在远程设备尚执行的命令,类型为str。只能单条命令输入;
expect_string:用于确定输出结束的正则表达式。如果留空将默认为基于路由提示符。
strip_prompt:从输出中删除未遂路由器标识(默认为:True)
strip_command:从输出中删除命令的回显(默认为:True)
cmd_verify:继续操作之前验证命令回显(默认为:True)
normalize:确保在命令结束时发送正确的输入

send_config_from_file()

def send_config_from_file(
    self, config_file=None, **kwargs)

从文件中读取命令并通过SSH通道发送。该文件逐行处理,每个命令都通过SSH通道发送。

send_config_from_file()相关参数

config_file:要发送到设备的配置文件的路径。

send_config_set()

def send_config_set(
    self, config_commands=None, exit_config_mode=True,    
    delay_factor=1, max_loops=150, strip_prompt=False, 
    strip_command=False, config_mode_command=None, 
    cmd_verify=True, enter_config_mode=True, error_pattern='', terminator='#')

通过SSH通道发送配置命令。在命令发送过程中会自动进入/退出配置模式。

send_config_set()相关参数

config_mode_command:进入配置模式的命令
enter_config_mode:发送配置命令前是否进入配置模式
 
posted @ 2022-08-17 14:43  Diligent_Maple  阅读(286)  评论(0编辑  收藏  举报