原创·科雷软件测试
学习目录
测开不得不会的python基础知识-字符串
字符串定义
关于转义字符
字符串格式化
字符串切片
字符串拼接
·使用加号‘+’连接字符串
·使用str.join()连接字符串,括号中为可迭代对象,比如列表
字符串分割
字符串成员判断
字符串替换
·str.replace()进行替换
·str.translate()进行替换
使用str.strip('字符')方法,去掉首尾字符
使用str.isspace()是否只包含空格,只包含返回True,否则为False
使用str.isdigit()是否只包含数字,只包含返回True,否则为False
使用str.encode()编码 ,str.decode()解码
字符串是 Python 中最常用的数据类型。我们可以使用引号( ' 或 " )来创建字符串。
字符串定义
#用单引号定义
>>>my_word='hello world'
>>>print(my_word)
hello world
#用双引号定义
>>>my_word="hello world"
>>>print(my_word)
hello world
#使用\将多行数据打印为一行数据
>>>userinfo = "Hello ,my name is wang,"\
"age is 21,"\
"I live in nanjing city."
>>>print(userinfo)
Hello ,my name is wang,age is 21,I live in nanjing city.
#使用三个双引号输出字符串
>>>userinfo = """ Hello ,my name is wang,
age is 21,
live in nanjing city.
"""
>>>print(userinfo)
Hello ,my name is wang,
age is 21,
live in nanjing city.
那一个较长的字符串如果既有单引号和双引号,程序可以执行吗?
one_session = "hello! my name is li ming, you can call me 'ming ge'"
#执行打印 结果中包含带单引号的数据
>>>print(one_session)
hello! my name is li ming, you can call me 'ming ge'
那字符串中如果全是单引号,执行后会有什么结果?
one_session = 'hello! my name is li ming, you can call me 'ming ge''
#执行后会报错语法不对
SyntaxError: invalid syntax
解决方案:在单引号前用转义字符\
one_session = 'hello! my name is li ming, you can call me \'ming ge\''#执行结果
>>>print(one_session)
hello! my name is li ming, you can call me 'ming ge'
关于转义字符
在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符。如下表:
转义字符 | 描述 | 实例 |
\(在行尾时) | 续行符 | >>> print("line1 \ ... line2 \ ... line3") line1 line2 line3>>> |
\\ | 反斜杠符号 | >>> print("\\") \ |
\' | 单引号 | >>> print('\'') ' |
\" | 双引号 | >>> print("\"")" |
\a | 响铃 | >>> print("\a") 执行后电脑有响声。 |
\b | 退格(Backspace) | >>> print("Hello \b World!") Hello World! |
\000 | 空 | >>> print("\000") >>> |
\n | 换行 | >>> print("\n") >>> |
\v | 纵向制表符 | >>> print("Hello \v World!") Hello World! |
\t | 横向制表符 | >>> print("Hello \t World!") Hello World!>>> |
\r | 回车,将 \r后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成。 | >>> print("Hello\rWorld!") World! >>> print('google runoob taobao\r123456') 123456 runoob taobao |
\f | 换页 | >>> print("Hello \f World!") Hello World!>>> |
\yyy | 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。 | >>> print("\110\145\154\154\157\40\127\157\162\154\144\41") Hello World! |
\xyy | 十六进制数,以 \x 开头,y 代表的字符,例如:\x0a 代表换行 | >>> print("\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21") Hello World! |
\other | 其它的字符以普通格式输出 |
举例:使用 \r 实现百分比进度
import time
for i in range(101):
print("\r{}%".format(i),end='')
#end参数默认是\n,也就是换行符。此时定义为空字符串,可以将for循环的内容打印在一行里
time.sleep(0.05)
字符串格式化
平常编程中经常用到在一个字符串变量中在定义其他变量,此时需要用到字符串的格式化。
比如以下变量中one_session = 'hello! my name is li ming',需要根据实际使用场景替换其中的name值,例如替换为张三或者李四。
python字符串格式化主要有三种方式:
- 类似C语言使用%号方法
- 使用str.format()方法
- 使用f-string,以f开头定义字符串
第一种%号方法 %s表示某字符串,%d表示某整形数据
>>>one_session = 'hello! my name is %s, age is %d' % ('lixiaolei',12)
>>>print(one_session)
hello! my name is lixiaolei, age is 12
第二种str.format()方法 #使用{}表示要替换的字符串 format后面小括号的数据跟前面{}的位置一一对应>>>one_session = 'hello! my name is {}, age is {}'.format('lixiaolei',12)>>>print(one_session)
hello! my name is lixiaolei, age is 12
#如果{}里添加了位置序号>>>one_session = 'hello! my name is {1}, age is {0}'.format('lixiaolei',12) >>>print(one_session)#name和age交换了变量值
hello! my name is 12, age is lixiaolei
第三种字符串以f开头 在大括号直接填入变量即可>>>name='lilei'
>>>age=12
>>>one_session = f'hello! my name is {name}, age is {age}'
>>>print(one_session)
hello! my name is lilei, age is 12
字符串切片
字符串切片跟列表一样,可以使用方括号 [] 来截取字符串。切片从0开始,最后一个字符也可以为-1
#定义一个变量
>>>username = 'lilei'#取变量第1个值 对应切片0 >>>value_0 = username[0]>>>print(value_0)
l
#取最后一个值 对应切片-1
>>>value_last = username[-1]
>>>print(value_last)
i
#取中间第2个到第3个 注意切片最后的值3是不包含在内的 实际取的切片是1和2
>>>value_mid = username[1:3]
>>>print(value_mid)
il
#注意切片最后的值是不包含的
字符串拼接
>>>username='lilei'#使用+连接字符串
>>>print('hello ' + username)
hello lilei
>>>username='lilei '#使用+=连接字符串 等同于 username = username + 'hello'
>>>username += 'hello'
>>>print(username)
lilei hello
>>>name_list = ['wang','san']# 用下划线连接列表中的值
>>>username = '_'.join(name_list)
>>>print(username)
wang_san
字符串分割
使用字符串内置函数str.split()分割,分割后输出列表
>>>username = 'wang_san_ming'
#用下划线切割字符串,输出列表
>>>username_list = username.split('_')
['wang', 'san', 'ming']
字符串成员判断
使用in/not in判断某字符是否在字符串里,输出为布尔值True 或者 False
>>>username = 'wang_san_ming'
>>>'wang' in username
True
>>>'zhang' in username
False
>>>'zhang' not in username
True
字符串替换
>>>userinfo = """ Hello ,my name is wang zhong wang,\
age is 21,\
live in nanjing city.
"""#将字符wang 替换为xu, 第三个参数表示替换次数,不填默认都会替换
>>>userinfo = userinfo.replace('wang','xu',1)
>>>print(userinfo)
Hello ,my name is xu zhong wang, age is 21, live in nanjing city.
如果需要一次性替换过个字符,translate函数更方便使用。使用前需要先定义替换的table,然后进行替换。
举例:字符串变量中包含中文逗号和句号,需要替换为英文逗号和句号
#定义一个需要替换的变量
>>>userinfo = "Hello ,my name is wang zhong wang。"
#1.使用maketrans创建替换的表,带1个dict参数
>>>userinfo_table = userinfo.maketrans({',':',','。':'.'})
>>>print(userinfo.translate(userinfo_table))
Hello ,my name is wang zhong wang.
#2.使用maketrans创建替换的表,带2个参数,每个替换的参数len要保持一致,否则报错
>>>userinfo_table = userinfo.maketrans(',。' , ',.')
>>>print(userinfo.translate(userinfo_table))
Hello ,my name is wang zhong wang.
#如果替换的参数填的不一致,报错如下
>>>userinfo_table = userinfo.maketrans(',',',.')
>>>print(userinfo.translate(userinfo_table))
ValueError: the first two maketrans arguments must have equal length
使用str.strip('字符')方法,去掉首尾字符
>>>userinfo = " Hello ,my name is wang zhong wang。 "
>>>print('字符串长度:',len(userinfo))
字符串长度: 36
# str.strip() 去掉首尾字符 参数不填默认是空格
>>>userinfo1 = userinfo.strip()
>>>print('字符串长度:',len(userinfo1))
字符串长度: 34
# str.lstrip() 去掉首部字符
>>>userinfo2 = userinfo.lstrip()
>>>print('字符串长度:',len(userinfo2))
字符串长度: 35
# str.rstrip() 去掉尾部字符
>>>userinfo3 = userinfo.rstrip()
>>>print('字符串长度:',len(userinfo3))
字符串长度: 35
使用str.isspace()是否只包含空格,只包含返回True,否则为False
>>>userinfo = " "
>>>print(userinfo.isspace())
True
>>>userinfo = " 2 "
>>>print(userinfo.isspace())
False
使用str.isdigit()是否只包含数字,只包含返回True,否则为False
>>>userinfo = "2334"
>>>print(userinfo.isdigit())
True
>>>userinfo = "2334l"
>>>print(userinfo.isdigit())
False
使用str.encode()编码 ,str.decode()解码
>>>userinfo = '章三'
#以 encoding 指定的编码格式编码 string
>>>userinfo_byte = userinfo.encode(encoding='utf-8')
>>>print(userinfo_byte)
b'\xe7\xab\xa0\xe4\xb8\x89'#编码后 字符串类型为bytes,为计算机识别的字节型
>>>print(type(userinfo_byte))
<class 'bytes'>
#解码
>>>print(userinfo_byte.decode())
章三
总结
只要功夫深,铁棒磨成针。
坚持学习很难,但我们相信自己可以做到;努力之后不一定有及时的收获,但是雨过天晴,就有机会看见美丽的彩虹。