python自动化测试 第 2 章.基本数据类型(字符串)
字符串定义
使用一个单引号、双引号、三引号或三个单引号、三个双引号包裹起来的字符的序列。
如:
a = 'a'
b = "bc"
c = """hello world"""
d = '''hello world'''
e ="""窗前明月光,
疑是地上霜
"""
print('a的类型为:',type(a))
print('b的类型为:',type(b))
print('c的类型为:',type(c))
print('d的类型为:',type(d))
print('e的类型为:',type(e))
特别地,引号中的不写任何内容即为空字符串,如:a = ''
单三引号和双三引号一般作为注释使用
字符串索引
索引是元素在序列中的位置,也叫下标
image.png
语法
···
str = ‘abcdef’
str[0]和str[-6]都是第一个字符a
str[-1]和str[5]都是最后一个字符f
···
字符串切片
语法
str[star:end:step]
- start 开始切片的索引,从头开始时可以省略
- end 结束切片的索引,从头开始时可以省略
- step 步长,每隔几个切一个 默认为1,当step为负数的时候,反向切片
例子:
s = '0123456789'
s[::-1] -->输出9876543210
s[1::2] -->输出13579
s[1:3:-1] -->step为负数,表示从右往左切,但是end在star的右边,所以无法切到内容,输出空
字符串拼接
+号拼接
a = 'hello'
b = ','
c = 'world!'
print(a ,b, c) #输出hello , world!,每个字符之间有空格
print(a +b +c) #输出hello,world!
*号拼接
s1 = '*'
print('*' * 100) #输出100个*
字符串常用方法
strip
strip([chars])返回原字符串的副本,移除其中的前导和末尾字符。 chars 参数为指定要移除字符的字符串。如果省略或为 None,则 chars 参数默认移除空白符。 实际上 chars 参数并非指定单个前缀或后缀;而是会移除参数值的所有组合:
移除字符前后的空格,中间的空格无法移除
s = ' 天空 之城 '
res = s.strip()
print(res) # 输出‘天空 之城’
res = 'www.example.com'.strip('cmow.')
print(res) # 输出example
split
split(sep=None, maxsplit=-1)
返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。 如果给出了 maxsplit,则最多进行 maxsplit次拆分(因此,列表最多会有 maxsplit+1 个元素)。如果 maxsplit 未指定或为 -1,则不限制拆分次数(进行所有可能的拆分)。
例子:
res = '刘德华-56-著名歌手'.split('-')
print(res) # 输出一个列表 ['刘德华', '56', '著名歌手']
str.join(iterable)
返回一个由 iterable 中的字符串拼接而成的字符串。 如果 iterable 中存在任何非字符串值包括 bytes 对象则会引发 TypeError。 调用该方法的字符串将作为元素之间的分隔。
将序列中的元素以指定的字符连接生成一个新的字符串。
a=','.join(['刘德华', '56', '著名歌手'])
print(a,type(a)) # 输出刘德华,56,著名歌手 <class 'str'>
replace
replace(old, new[, count])返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。如果给出了可选参数 count,则只替换前 count 次出现。
'888-888-888'.replace('-', '') #把-替换成空字符,即输出‘888888888’
其他方法参考官方文档:https://docs.python.org/zh-cn/3.8/library/stdtypes.html#string-methods
字符串与数值转换
- 整数和整数字符串的相互转化
# 整数和整数字符串的相互转化
int_str = '1'
res = int(int_str)
print(type(res))
- 浮点数和浮点数字符串的相互转化
# 浮点数和浮点数字符串的相互转化
f_str = '1.2'
res = float(f_str) # 把字符串转换成浮点数
print(type(res))
print(type(str(res)), str(res)) # 把浮点数转换成字符串
- 整数字符串可以转化成浮点数
# 整数字符串能转化成浮点数
int_str = '1'
res = float(int_str)
print(type(res))
- 浮点数字符串不能转换成整数
不是整数字符串的都不能转换成整数
float_str = '1.0'
res = int(float_str) # 会报错
print(type(res))
转义字符
在需要在字符串中表示特殊字符时,可以使用反斜杠\转义字符
记忆:人字,撇是正斜杠,捺是反斜杠
(在行尾时) | 续行符 |
---|---|
\\ |
反斜杠符号 |
\' |
单引号 |
\" |
双引号 |
\a | 响铃 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
print('\\\\') # 输出\\
print('\\') # 输出\\
print('\\\') # 会报错
print('\'') # 输出单引号
print(r'床前明月光,\n疑是地上霜') # raw 原始 原本,原样 # 输出: 床前明月光,\n疑是地上霜
字符串格式化
python支持两种形式的字符串格式化
1、百分号%字符串格式化方式
%
字符串格式化
模板字符串语法格式如下:
%[(name)][flags][width][.precision]typecode
-
(name)
可选,用于选择指定的key
-
flags
可选,可供选择的值有,注意只有在和数值类型的typecode
配合才起作用-
+
, 右对齐,正数前加正号,负数前加负号 -
-
, 左对齐,正数前无符号,负数前加负号 -
空格
, 右对齐,正数前加空格,负数前加负号 -
0
, 右对齐,正数前无符号,复数前加负号;用0
填充空白处
-
-
width
,可选,字符串输出宽度 -
.precision
可选,小数点后保留位数,注意只有在和数值类型的typecode
配合才起作用 -
typecode
必选-
s
,获取传入对象的字符串形式,并将其格式化到指定位置 -
r
,获取传入对象的__repr__
方法的返回值,并将其格式化到指定位置 -
c
,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置 -
o
,将整数转换成 八 进制表示,并将其格式化到指定位置 -
x
,将整数转换成十六进制表示,并将其格式化到指定位置 -
d
,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置 -
e
,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e) -
E
,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E) -
f
, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位) -
F
,同上 -
g
,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)` -
G
,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)` - %,当字符串中存在格式化标志时,需要用 %%表示一个百分号
-
用法:模板字符串 % (槽位)
format_str1 = '%s计算机的内存利用率为%.3f%%'
time_str = '11:15'
percent = 0.7588
res = format_str1 % (time_str, percent*100)
print(res)
num = 10
'%s,%d,%.2e,%o' % (num, num, num, num)
key的用法:
'%(num)s,%(num)d,%(num1).2e,%(num)o' % {"num":10,"num1": 20}
2、formate字符串格式化方式
基本语法是:
<模板字符串>.format(<逗号分隔的参数>)
在模板字符串中使用{}
代替以前的%
作为槽位
{}
中除了可以写参数索引外,还可以填写控制信息来实现更多的格式化功能,语法如下
{<参数序号>:<格式控制标记>}
其中格式控制标记格式如下
[fill][align][sign][#][0][width][,][.precision][type]
-
fill 【可选】空白处填充的字符
-
align 【可选】对齐方式(需配合width使用)
-
<,内容左对齐
-
>,内容右对齐(默认)
-
=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
-
^,内容居中
-
sign 【可选】有无符号数字
- +,正号加正,负号加负;
- -,正号不变,负号加负;
- 空格 ,正号空格,负号加负;
-
# 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
-
, 【可选】为数字添加分隔符,如:1,000,000
-
width 【可选】格式化位所占宽度
-
.precision 【可选】小数位保留精度
-
type 【可选】格式化类型
- 传入” 字符串类型 “的参数
- s,格式化字符串类型数据
- 空白,未指定类型,则默认是None,同s
- 传入“ 整数类型 ”的参数
- b,将10进制整数自动转换成2进制表示然后格式化
- c,将10进制整数自动转换为其对应的unicode字符
- d,十进制整数
- o,将10进制整数自动转换成8进制表示然后格式化;
- x,将10进制整数自动转换成16进制表示然后格式化(小写x)
- X,将10进制整数自动转换成16进制表示然后格式化(大写X)
- 传入“ 浮点型或小数类型 ”的参数
- e, 转换为科学计数法(小写e)表示,然后格式化;
- E, 转换为科学计数法(大写E)表示,然后格式化;
- f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
- F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
- g, 自动在e和f中切换
- G, 自动在E和F中切换
- %,显示百分比(默认显示小数点后6位)
- 传入” 字符串类型 “的参数
'{}计算机的内存利用率为{:.2%}'.format('11:15', 0.7588)
'%(num)s,%(num)d,%(num1).2e,%(num)o' % {"num":10,"num1": 20}
'{0},{0:d},{0:.2e},{0:o}'.format(20)