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库中导入"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:发送配置命令前是否进入配置模式