Python字符串类型的定义和使用
字符串(str)是 Python 非常重要的数据类型,是用英文引号括起来的一段文本。引号可以是单引号、双引号、三引号(三个单引号或者三个双引号),必须成对出现,引号中间的文本内容是字符串承载的数据。
如果只写一对引号,无任何内容(包括空格),该字符串就被称为空字符串。
在 Python 中没有 char(字符)这种数据类型。字符串中的字符数量可以是任意个,包括 0 个、1 个或者多个。单引号和双引号多用于定义一行文本,三引号多用于定义一段文本(有跨行的内容出现)。字符串可用来表示 IP 地址、设备名称、配置文本、配置命令等信息。
字符串的定义如下所示:
反斜杠被称为转义符号,
在后续的开发中会使用文件路径作为变量,而 Windows 系统的路径是反斜杠,正好与转义符号冲突。处理方式一般有两种:
【实例】路径中转义符号的处理。
Python 的字符串格式化方法很多,这里主要介绍易上手且不易出错的 format() 方法。首先定义一个字符串模板,并将需要填充值的位置用花括号({})括起来。然后对字符串模板调用 format() 方法,依次传入要填充的变量,填充变量的数量和顺序要与花括号对应。
【实例】基于位置的 format() 方法的使用。
【实例】基于参数名的 format() 方法的使用。
在 Python 网络运维自动化实践中,find() 方法多用于判断指定字符串是否包含某关键字,小于 0 代表未发现子串,大于等于 0 代表发现了子串。
【实例】find()方法的使用。
【实例】startswith() 方法的使用。
【实例】endswith() 方法的使用。
split() 方法默认用空白符进行切割。空白符泛指没有显示却又占位置的符号,例如空格、制表符、换行符。
【实例】split() 方法的基本使用。
split() 方法也可以用指定的字符串去分割,例如使用“is”去分割。
【实例】带参数的 split() 方法使用。
strip() 方法默认去除字符串左右的所有空白符,也可以去除方法内直接传入的字符串。
strip() 还有两个变种方法:lstrip() 和 rstrip(),分别去除左侧和右侧的指定字符串,读者了解即可。
【实例】strip() 方法的基本使用。
splitlines() 多用于将网络配置文本按行分割,以便后续针对每行文本进行配置和解析。
【实例】splitlines() 方法的使用。
【实例】replace()方法的使用。
如果只写一对引号,无任何内容(包括空格),该字符串就被称为空字符串。
在 Python 中没有 char(字符)这种数据类型。字符串中的字符数量可以是任意个,包括 0 个、1 个或者多个。单引号和双引号多用于定义一行文本,三引号多用于定义一段文本(有跨行的内容出现)。字符串可用来表示 IP 地址、设备名称、配置文本、配置命令等信息。
字符串的定义如下所示:
dev_ip = '192.168.137.201' dev_name = 'as01' dev_manufacture = 'HUAWEI' dev_room = '0401' intf_config = '''interface Vlan20 ip address 192.168.137.201 255.255.255.0 ''' cmd = "show version"单引号和双引号本质上没有区别。作者习惯用单引号来表示单行的字符串,这样的代码在视觉上更清晰、易读。
Python字符串的转义
计算机编码中除了可显示字符外,还有一些有特殊含义的不可见字符。这类字符是经过转义的字符,例如使用\n
代表换行符,反斜杠(\)与后面的字母 n 组合在一起,字母 n 不再代表原来的字母,而是形成了新的字符,这就是转义。反斜杠被称为转义符号,
\n
被称为转义字符。常用的转义字符如下表所示。转义字符 | 说明 |
---|---|
\n | 换行,将光标位置移到下一行开头 |
\r | 将光标位置移到本行开头 |
\' | 单引号,在单引号定义的字符串中使用单引号,需要使用转义字符的单引号 |
\" | 双引号,在双引号定义的字符串中使用双引号,需要使用转义字符的双引号 |
\\ | 斜杠符号,\ 本身是转义符号,如果想用 \ 表示字符串本身的含义而非转义,就需要使用双反斜杠 |
在后续的开发中会使用文件路径作为变量,而 Windows 系统的路径是反斜杠,正好与转义符号冲突。处理方式一般有两种:
- 一种方式是使用双反斜杠,本质是用了转义符;
- 另一种方式是在字符串定义的最左侧添加一个字母 r,代表使用原始字符串,它可以取消路径中的转义。
【实例】路径中转义符号的处理。
filepath = 'D:\\config.txt' filepath = r'D:\config.txt'
Python字符串常用方法
Python 的字符串提供了很多方法,可以便捷地处理文本,例如格式化、查找、分割、大小写转换等,下面将简单介绍一些实际开发中常用的方法。1) format()方法
字符串格式化是指按照预定义模式,对传入的字符串进行填充,并输出格式化后的字符串的过程。Python 的字符串格式化方法很多,这里主要介绍易上手且不易出错的 format() 方法。首先定义一个字符串模板,并将需要填充值的位置用花括号({})括起来。然后对字符串模板调用 format() 方法,依次传入要填充的变量,填充变量的数量和顺序要与花括号对应。
【实例】基于位置的 format() 方法的使用。
server = 'host01' ip_addr = '192.168.1.100' intf_desc_tpl = 'connect to {}, ip:{}' intf_desc = intf_desc_tpl.format(server,ip_addr) print(intf_desc) # 结果是"connect to host01, ip:192.168.1.100"format() 方法还有另一个书写方式:首先在定义字符串模板时,在花括号内输入需要填充参数的参数名;然后在调用 format() 方法时,使用
<参数名>=<值或变量名>
的方式进行赋值。此方法可读性更好、更灵活(无须考虑参数顺序)。【实例】基于参数名的 format() 方法的使用。
server = 'host01' ip_addr = '192.168.1.100' intf_desc_tpl = 'connect to {SERVER}, ip:{SERVER_IP}' intf_desc = intf_desc_tpl.format(SERVER=server, SERVER_IP=ip_addr) print(intf_desc) # 结果是"connect to host01, ip:192.168.1.100"
2) find()方法
find() 方法用于查找字符串中包含指定的子字符串(简称子串)的开始位置,如果发现子串,就返回子串首字母出现的位置索引值(Python 中的索引值从 0 开始);如果未发现子串,就返回 −1。在 Python 网络运维自动化实践中,find() 方法多用于判断指定字符串是否包含某关键字,小于 0 代表未发现子串,大于等于 0 代表发现了子串。
【实例】find()方法的使用。
intf_show = 'Eth1/1 is up' up_index = intf_show.find('up') print(up_index) # 输出结果为 10
3) startswith()方法
startswith() 方法用于判断字符串是否以指定的字符串开始,输出结果是真(True)或假(False)。【实例】startswith() 方法的使用。
intf_show = 'Ethernet1/1 is up' is_interface_line = intf_show.startswith('Ethernet') print(is_interface_line) # 输出结果是True
4) endswith()方法
endswith() 方法用于判断字符串是否以指定的字符串结束,输出结果是真(True)或假(False)。【实例】endswith() 方法的使用。
intf_show = 'Ethernet1/1 is up' interface_up = intf_show.endswith('up') print(interface_up) # 输出结果是True
5) split()方法
split() 方法用于分割字符串,返回的结果是分割后的字符串的列表。split() 方法默认用空白符进行切割。空白符泛指没有显示却又占位置的符号,例如空格、制表符、换行符。
【实例】split() 方法的基本使用。
intf_show = 'Ethernet1/1 is up' result = intf_show.split() print(result) # 输出结果是['Ethernet1/1', 'is', 'up']通过 split() 方法,读者可以执行
display interface brief
命令,从而获取简单的表状配置文本,并从中提取相关信息。其用法是针对每行文本使用 split() 方法进行分割,然后通过列表的索引就可以访问对应字段的值。split() 方法也可以用指定的字符串去分割,例如使用“is”去分割。
【实例】带参数的 split() 方法使用。
intf_show = 'Ethernet1/1 is up' result = intf_show.split('is') print(result) # 输出结果是['Ethernet1/1 ', ' up']这种方法可以直接获取端口名称和状态。对于代码执行结果中的端口名称和状态中的多余的空格,可以通过 strip() 方法去除。
6) strip()方法
strip() 方法用于去除字符串左右的指定字符串,并将去除指定字符串后的内容以字符串形式返回。strip() 方法默认去除字符串左右的所有空白符,也可以去除方法内直接传入的字符串。
strip() 还有两个变种方法:lstrip() 和 rstrip(),分别去除左侧和右侧的指定字符串,读者了解即可。
【实例】strip() 方法的基本使用。
intf_show = ' Ethernet1/1 is up ' result = intf_show.strip() print(result) # 输出结果是"Ethernet1/1 is up"
7) splitlines()方法
splitlines()方法用于按行分割字符串,并返回一个字符串的列表,默认情况下,行结束符号由 Python 自动判断。splitlines() 多用于将网络配置文本按行分割,以便后续针对每行文本进行配置和解析。
【实例】splitlines() 方法的使用。
intf_config = '''interface Vlan20 ip address 192.168.137.201 255.255.255.0 ''' configs = intf_config.splitlines() print(configs) # 输出结果是['interface Vlan20', ' ip address 192.168.137.201 255.255.255.0']
8) replace()方法
replace() 方法用于将字符串中的特定子串替换为指定的字符串,并返回替换后的结果。它有两个参数:- 一个是 old 参数,是要被替换的字符串;
- 另一个是 new 参数,是替换之后的字符串。
【实例】replace()方法的使用。
intf_name = 'Eth1/1' full_intf_name = intf_name.replace('Eth', 'Ethernet') print(full_intf_name) # 输出结果是"Ethernet1/1"