type
status
date
slug
summary
tags
category
icon
password
- 一个个字符组成的有序序列,是字符的集合, 也就是容器
- 使用单引号, 双引号或三引号引住的字符序列
- 字符串是不可变对象,是字面常量
- Python3起,兼容所有的Unicode字符
字符串类型(str)不同与字节串类型(bytes),但两者直接可以相互转换,大样后面将会介绍字节串类型
2.1 认识字符串
在Python字符串周围,单引号和双引号字符串是一样的,可以互换。之所以支持这两种形式的原因是,你不进行反斜杠转义就可以在一种引号的字符串中包含另一种引号。
如果有多行字符,那么此时可以考虑用三行引号实现原格式输出,通常在开发中被用于文档字符串。
1、转义字符
怎样让字符串内部显示引号呢?
- 方式一:用双(三)引号
spam = "That is Alice's cat."
spam = """That is Alice's cat."""
(不能同时用单引号,)
- 方法二:转义字符\
spam = 'Say hi to Bob\'s mother.'
转义字符列表:
\'
单引号(保留‘)\"
双引号(保留”)\\
倒斜杠(保留一个\)\t
水平制表符 \v
垂直制表符\f
换页符\n
换行符 \0
空字符:二进制的0字符\xhh
十六进制hh的字符(准确为两个数位)\000
八进制000的字符(可达3个数位)空白字符:
\t \r \n \f
注:
- 转义字符算一个字符
- 在字符串中允许嵌入ASCII码表示的字符。
- 字符”0”的二进制表示为’\x30’,八进制表示为’\060’,但不管如何指定不可打印字符,Python都以十六进制显示。
- 如果Python认为”\”后的字符不是有效的转义编码,会直接在保留”\”
2、前缀
- r前缀:所有字符都是本来意思,没有转义
- f前缀:使用变量插值,配合
{}
使用,花括号内为变量
注:
- 在Python中,没有其他语言的char类型,字符串中每一个字符元素也被定义为是字符串类型。
- 即使r前缀可以阻止转义,但仍然不能以“\”作为字符串结尾,即
r"C:\windows\top_apks\”
语法错误,会报错,可以使用r"C:\windows\top_apks\\"
如果data_path=r"C:\windows\top_apks"; file_name=”train.txt”,那么法一显然不能用了,但是法二依然可以生效
大样个人建议:使用目录路径时使用”\\”结尾(解决初学者学习Python的头疼点之一)
- f前缀和r前缀可以一起使用, fr或rf都可.
3、ASCII字节值
- ord(c) 将单个字符转换为其底层的ASCII字节值(十进制)
- chr(i) 将ASCII字节值转化为对应的字符
2.2 字符串的实际应用
1、索引和切片
- 索引
- 格式: 变量或对象[索引]
- 根据索引号, 获取对应元素
- 切片
- 格式: 变量或对象[开始索引:结束索引:步长]
- 从开始索引截取, 到结束索引结束. 包左不包右. 步长表示间隔
- 索引有正向 和 负向, 所以: 正向索引 表示 从左往右拿. 负向索引 表示从右往左.
- 步长有正步长和负步长, 正表示从左向右索引, 负步长表示从右往左索引.
字符串第一个元素的正索引为0, 最后一个元素的正索引为
len(str)-1
.第一个元素的负索引为-len(str)
, 最后一个元素的负索引为-1
2、str.index(sub[,strat,[end]]),str.rindex(sub[,strat,[end]]) 不推荐使用
index方法不仅可以查找单个字符在字符串中下表位置,也可以查找连续子字符串的下标位置
查找不到会抛异常
3、str.find(sub[,strat,[end]]),str.rfind(substring,[strat,[end]])
find,rfind方法和index方法类似,一样也是查找子串在字符串中的下表位置。find方法是从左边开始查找,rfind是从右边开始查找,两方法查找方向不同,但对于同一子串,返回值一样。查找也可以设置设置区间,左开右闭原则。
另外,不像index方法,find和rfind在查找不到会返回负数表示没找到,而不是抛异常。
4、str.count(sub[, strt[, end]]) → int
在指定区间[start,end),从左至右,统计子串sub出现次数
count 能不要就不用,字符串子串问题,是相当难的算法题
5、len(string)
返回字符串长度,即字符串个数
6、 in判断
2.3 连接
1、 +
加号可以将两个字符串连接起来
2、sep.join(iterable)
join方法使用指定字符串作为分隔符,,将可迭代对象中迭代出来的字符串元素通过sep拼接在一起。,返回一个新的字符串。
注:join函数不做处理的话只能拼接字符串,如
",".join(range(5))
会报错:TypeError: sequence item 0: expected str instance, int found
解决方法:",".join(map(str,range(5)))
2.4 分割
1、str.split([sep[,maxsplit]]), str.rsplit([sep[,maxsplit]]) —> list of strings
split方法将字符串从左到右按照分隔符分割成一个个子串,并返回成包含这些子串的列表,同时可以声明分割次数。如果没有分割标符的话,默认按照空白字符分割;rsplit方法是从右到左的顺序开始分割,但输出的字符串列表不会反
2、str.splitlines([keepends]) —> list of strings
按照行来切分字符串,参数keepends指的是是否保留分隔符,默认为False,不保留
换行符包括\n(Mac),\r\n(Windows),\r(linux)等
3、str.partition(sep) , str.rpartition(sep) —> (head,sep,tail)
- partition(sep)从左至右,rpartition(sep)从有至左,遇到分隔符就把字符串切割成两部分,返回头、分隔符,尾三部分的三元组
- 如果没有分隔符或分隔符找不到匹配字符,就返回头、2个空元素的三元组
- sep分割字符串必须指定
2.5 替换
str.replace(old,new[,count]) —> str
字符串中找到匹配的替换为新子串,count表示替换几次,默认全部替换,返回新字符串(Python中的字符串替换不是就地修改).不支持模式匹配,后面通过re正则实现模式匹配。
2.6 删除
1、str.strip([chars]) —> str 从两端
默认将两端的空白字符都去除;指定被移除chars,删除两段出现在chars中的字符。直到字符串中出现chars没有对应的字符为止
注:向 strip()方法传入参数'ampS', 告诉它在变量中存储的字符串两端, 删除出现的a、 m、 p 和大写的 S。传入 strip()方法的字符串中, 字符的顺序不重要: strip('ampS')做的事情和 strip('mapS')或 strip('Spam')一样。
2、str.lstrip([chars]), str.rstrip([chars]) —> str 从左,右开始
2.6 首尾判断
str.startswith(prefix[, start[, end]]), endswith(suffix[, start[, end]]) —> bool(True or False)
startswith匹配字符串是否以prefix开头,endswith匹配字符串是否以suffix结尾,是返回True,否返回False。
strat和end为下表,指定从这么位置开始开头或结尾匹配
2.7 大小写转换
- str.upper() 将字符串中所有字符转换成大写
- str.lower() 将字符串中所有字符转换成小写
- str.swapcase() 将字符串中所有字符的大小写进行反转
1.8 其他函数(了解)
这些方法常用于用户输入验证,在后面会学习正则表达式,进行严格的模式匹配,这些方法不用过多了解。
方法 | True条件 |
islower() | 全小写 |
isupper() | 全大写 |
isalpha() | 只包含字母和数字,并且非空 |
isdecimal() | 只包含数字字符,并且非空 |
isspace() | 只包含空格、制表符和换行,并且非空 |
istitle() | 仅包含以大写字母开头、后面都是小写字母的单词 |
1.3.5 对其文本方法 rjust()、ljust()和center()
用法:打印表格式数据
格式:’str’.r/ljust(n,’str_n’) ‘str’.center(n,’str_n’)
参数: n:为字符串总长度 str_n:填充字符串
rjust()和 ljust()字符串方法返回调用它们的字符串的填充版本, 通过插入特定字符填充来实现字符串对其。默认空格填充。
center()让文本居中.
>>>'Hello'.rjust(10)
' Hello'
>>>'Hello'.ljust(10)
'Hello ‘
>>>'Hello'.rjust(20, '*')
'***************Hello'
>>>'Hello'.ljust(20,'-')
'Hello---------------'
>>>'Hello'.center(20, '=')
'=======Hello========'
下面是将字典通过形式打印出来。
1.4 用 pyperclip 模块拷贝粘贴字符串
pyperclip 模块有 copy()和 paste()函数, 可以向计算机的剪贴板发送文本, 或从它接收文本。但是pyperclip不是自带的,需要安装第三方模块。
>>> import pyperclip
>>>pyperclip.copy('Hello world!')
>>>pyperclip.paste()
'Hello world!'
先复制任意内容再执行pyperclip.paste()试试