1. 字符串(str)的概述
python中字符串属于不可变有序序列,由 ' ' 、 "" 、 ''' '''作为定界符,不两只的定界符可以相互嵌套
2.字符串编码格式
ASCII码采用1个字节对字符进行编码
UTF-8对全世界所有国家用到时的字符进行了编码,以1个字节表示英语字符(兼容ASCII),以3个字符表示中文。Python 3.x默认使用UTF-8编码格式,支持中文,在统计字符串长度时,无论是一个数字,英文字母,还是一个汉字,都按一个字符统计计算。
>>>s='中国'
>>>len(s)
2
3. 转义字符与原始字符串
这里只介绍常用的
\\ | 一个单斜线 |
\b | 退格符 |
\n | 换行 |
\r | 回车 |
\f | 换页符 |
\t | 水平制表 |
\v | 垂直制表 |
\uhhhh | 4位16进制数对应Unicode字符 |
\ooo | 3位八进制数对应的字符 |
\xhh |
2位16进制数对应的字符 |
注:这里介绍地址的两种写法
str_a='C:\Windows\notedpad.exe' #错误写法
print(str_a)
str_b='C:\\Windows\\notedpad.exe' #写法1
print(str_b)
str_c=r'C:\Windows\notedpad.exe' #写法2,对任何转义字符都不转换
print(str_c)
4. 字符串的格式化
a. 转义字符的格式化(这里只介绍常用的)
格式字符 | 说明 |
%% | 格式为个%符号 |
%s | 格式化为字符串 |
%c | 单个字符 |
%d,%i | 十进制 |
%o | 八进制 |
%x | 十六进制 |
%e,%E | 指数 |
%f,%F | 浮点数 |
%% | 格式为个%符号 |
用法:
str_x=123456
print('%o' % str_x) #转化为八进制整数
print('%x' % str_x) #转化为十六进制整数
print('%d,%c' % (68,68)) #多个转换
b. 使用format()方法格式化
该方法可以对b(二进制)、c(Unicode)字符、d(十进制)、o(八进制)、x(十六进制)、等进行格式化,还增加了使用符号作为分隔符来提高数字的可读性
语法:(其中花括号里为输出部分)
' { 格式 } ' . format(字符串)
例:
str_f=1/3
print('{0:.3f}'.format(str_f)) #保留3位小数
print('{0:%}'.format(3.5)) #转为百分数
print('{0:.2%}'.format(3.5)) #只保留2位小数
tuple_a=(5,8,13)
print('x:{0[0]};y:{0[1]};z:{0[2]}'.format(tuple_a))
print('{0:_},{0:_x}'.format(100000000)) #_表示对整数从右向左3位一分,第二个转换为16进制3位一分
注:上面的方法需要考虑python 3.6版本以上的支持
c. 格式化字符串常量
语法:
f ' { 字符串常量的值:{显示字符串的总宽度 } . { 精度包含了整数的部分 } } '
例:
print(f'{11/3:{10}.{4}}') #总长为10,含整数部分精度为4
print(f'值为:{14/2:{5}.{4}}')
5. 字符串常用方法和操作
1. find()和rfind()
find()查找一个字符串在另一个字符串指定范围(默认是整个字符串)首次出现的位置
rfind()查找最后出现的位置
如果不存在的返回-1
str_a='12,45,7,90,2,45,7'
print(str_a.find('7',5)) #从第五个开始(包含了分隔符,从0开始)
print(str_a.rfind('90')) #从尾部开始,下标还是从左向右从0开始
print(str_a.find('z')) #返回-1,不存在
2. index()和rindex()
index()用来返回一个字符串在另一个字符串范围首次出现的位置
rindex()返回最后一次出现的位置
如果不存在的话抛出异常
print(str_a.index('90'))
注:以上四种我也不清楚有什么不同,好像就只有不存在时,返回不同
3. count()
count()用来返回一个字符串在另一个字符串中出现的次数,不存在的话返回0
print(str_a.count(','))
4. split()和 rsplit()
split()用来指定字符的分隔符,从左端开始分隔成字符串,返回包含分隔结果的列表
rsplit()这个是从右开始
print(str_a.split('4')) #并把指定的分隔符变为,
注: 如果不指定分隔符的话,则从字符串中的任何空白符号(包括空格、换行符、制表符等)的连续出现都被认为是分隔符,并自动删除两端的空白字符
5. partition()和rpartition()
partition()用来指定字符串为分隔符串分隔成3部分(分隔符之前的字符串、分隔符字符串、分隔符之后的字符串),从左到时右
rpartition()从右到左
print(str_a.partition('0'))
注: 如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符串
6. join()
join()用来将个多个字符串进行连接,并在相邻字符串之间插入指定字符串,返回新的字符串
str_b='12345689'
print(':'.join(str_b))
7.
lower()字符串转换为小写字符串
upper()字符串转换为大写字符串
capitalize()将字符串首字母变为大写
title()将每个单词的首字母变大写
swapcase()大小写互换
str_c='What is your Name?'
print(str_c.lower()) #转小写
print(str_c.upper()) #转大写
print(str_c.capitalize()) #首字符串大写
print(str_c.title()) #单词首字大写
print(str_c.swapcase()) #大小写互换
replace()用来替换字符串中指定字符或子字符串的所有重复出现,每次只能替换一个字符或一个字符串
maketrans()用来生成字符映射表
translate()用来根据映射表中定义的对应关系转换字符串并替换其中的字符
print(str_c.replace('is','are')) #前面的参数是要修改的值,后面的参数是,要修改为的的值
print(str_c.translate(''.maketrans('abcde','ABCDE')))
8. strip()、rstrip()、lstrip()
strip()删除两端的指定字符
rstrip()删除右侧的指定字符
lstrip()删除左侧的指定字符
print(' 1 hello world 1 '.strip('1')) #strip()不指定参数,就是删除空白字符
print('aaa hello world aaa'.rstrip('a')) #删除右侧字符
print('aaa hello world aaa'.lstrip('a')) #删除左侧字符
注:空白字符指:制表符,换行符,回车符,空格等
9. startswith()和endswith()
startswith()检测是否以指定字符串开始
endswith()检测是否以指定字符串结束
str_d='A is gilr .'
print(str_d.startswith('A')) #结果返回True
print(str_d.endswith('.'))
print(str_d.startswith('A',0,5)) #可指定起始位置与结束位置
10.
isalnum()
isalpha()测试全部是否为英文字母返回True
isdigit()测试全部是否是数字
isspace()测试是否是全部为空白字符
isupper()测试是否是大写字母
islower()测试是否是小写字母
11.对字符串进行排版
center()居中对齐
ljust()左对齐
rjust()右对齐
print("hello world".center(20)) #指定长度
print("hello world".ljust(20,'-')) #指定长度,其余部分-填充,默认空格
print("hello world".rjust(20,'-'))
结果:
hello world
hello world---------
---------hello world
6.字符串内置函数
len()字符串长度
max()最大字符
min()最小字符
reversed()翻转字符
sorted()字符串排序
eval()计算字符串的值
print(len("abc"))
print(max('abcd'))
print(min('abcd'))
print(sorted('acdefdlie')) #返回的是列表
print(''.join(reversed('acdefdlie')))
a=1
b=2
print(eval('a+b')) #要求ab变量已经存在
结果:
3
d
a
['a', 'c', 'd', 'd', 'e', 'e', 'f', 'i', 'l']
eildfedca
3
7.中英文分词
这里需要安装两个包jieba或snownlp
然后需要导入jieba和snownlp两个包 ( 如果报错,需要对这两个包进行加载,在横线上点击会有提示 )
1. 中文分词
import jieba
x_str='我是一个中国人,我是一个学生,我是一个孩子'
#使用默认词库分
print('jieba分词:',list(jieba.cut(x_str)))
import snownlp
print('snownlp分词:',snownlp.SnowNLP(x_str).words)
结果:
jieba分词: ['我', '是', '一个', '中国', '人', ',', '我', '是', '一个', '学生', ',', '我', '是', '一个', '孩子']
snownlp分词: ['我', '是', '一个', '中国', '人', ',', '我', '是', '一个', '学生', ',', '我', '是', '一个', '孩子']
2. 汉字到拼音的转换
from pypinyin import lazy_pinyin,pinyin
print(lazy_pinyin("拼音"))
#带声调的拼音
print(lazy_pinyin("拼音",1))
#返回多音字的所有读音
print(pinyin("拼音",heteronym=True))
注:1表示带声调,2表示字母的声调后根数字表示,3.表示返回拼音首字母