字符串
- 是由0个或者多个字符组成的有序字符序列
由一对单引号、一对双引号、一对三单引号或三双引号表示,其中,三单引号和三双引号可表示多行字符串
在字符串之前,我们首先来了解一下ASCII和Unicode编码:
比较字符ASCII码值的大小:
空格<数字<大写字母<小写字母
Unicode编码
- 是统一字符编码,即是几乎覆盖所有字符的编码方式
- 从0到1114111(0x10FFFF)空间,每个编码都对应一个字符
- Python字符串中每个字符都是Unicode编码字符
函数即其使用 | 描述 |
---|---|
chr(x) | 返回 Unicode编码x对应的字符 |
ord(x) | 返回单字符x对应的Unicode编码 |
现在,开始正式进入Python字符串
1、Python字符串运算符
操作符及其使用 | 描述 |
---|---|
x + y | 连接字符串x和y |
x * n | 重复n次输出字符串x |
[] | 通过方括号 [] 索引获取字符串中字符 |
[m : n] | 从字符串编号 m 截取到 n-1 部分 |
[m : n : k] | 从字符串编号 m 跨 k 步截取到 n-1 部分 |
in | 成员运算符 ,如果字符串中包含给定的字符返回 True |
not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True |
r/R | 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 |
% | 格式字符串 |
>>>print(r'\n')
\n
>>> print(R'\n')
\n
2、Python的特殊字符—— 转义符 ( \ )
在需要在字符中使用特殊字符时,python用反斜杠( \ )转义字符
➢ \ (在行尾时) 续行符
➢\ \ 反斜杠符号
➢ \ ’ 单引号
➢ \ " 双引号
➢ \a 响铃
➢ \b 退格(Backspace)
➢ \e 转义
➢ \000 空
➢ \n 换行,光标移动到下行首
➢ \r 回车,光标移动到本行首
➢ \v 纵向制表符
➢ \t 横向制表符
➢ \f 换页
➢ \oyy 八进制数,yy代表的字符,例如:\o12代表换行
➢ \xyy 十六进制数,yy代表的字符,例如:\x0a代表换行
3、 Python字符串格式化
字符串格式化用于解决字符串和变量同时输出时的格式安排
python格式化符号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | 同%f和%e |
%G | 同%f 和 %E |
%p | 用十六进制数格式化变量的地址 |
由于格式化符号使用起来比较麻烦,所以新增了一种格式化字符串的函数 str.format(),format()方法可以非常方便地连接不同类型的变量或内容,增强了字符串格式化的功能
format()方法的基本使用: <模板字符串>.format(<逗号分隔的参数>)
<模板字符串>由一系列的槽(大括号{})组成,用来控制修改字符串中嵌入值出现的位置,其思想是将format()方法的<逗号分隔的参数>中的参数按照序号关系替换到<模板字符串>的槽中。如果大括号中指定了使用参数的序号,按照序号对应参数替换;如果大括号中没有序号,则参数按照顺序替换到 {}。
若要输出大括号,采用 {{ 表示 { ,}} 表示 }
>>>"圆周率{{{1}{2}}}是{0}”.format("无理数",3.1415926,"...")
圆周率{3.1415926...}是无理数
format()方法的格式控制: {<参数序号>: <格式控制标记>}
format()方法中<模板字符串>的槽除了包括参数序号,还可以包括格式
控制信息。<格式控制标记>用来控制参数显示时的格式,
其中,<类型>表示输出整数和浮点数类型的格式规则。
➢ b: 输出整数的二进制方式;
➢ c: 输出整数对应的Unicode字符;
➢ d: 输出整数的十进制方式;
➢ o: 输出整数的八进制方式;
➢ x: 输出整数的小写十六进制方式;
➢ X: 输出整数的大写十六进制方式;
➢ e: 输出浮点数对应的小写字母e的指数形式;
➢ E: 输出浮点数对应的大写字母E的指数形式;
➢ f: 输出浮点数的标准浮点形式;
➢ %: 输出浮点数的百分形式。
>>>a = “I love Python!”
>>>b = “*”
>>>c = “<”
>>>print(“{0:{1}^25}”.format(a,b))
*****I love Python!*****
>>>print(“{0:{1}>{2}}”.format(a,b,25))
**********I love Python!
>>>print(“{0:{1}{3}{2}}”.format(a,b,25,c))
I love Python!**********
4、字符串的内置函数
4.1字符串的类型判断
str. isdigit()
判断字符串是否全为数字(0-9)
str. isdecimal()
判断字符串是否只包含进制数字字符
str, isnumeric()
判断字符串是否只包含数字字符.
对于非Unicode字符串,上述三个方法是等价的。
str. isalpha()
判断字符串是否全为字母
str. isalnum()
判断字符串是否全为字母或数字
str. islower()
判断字符串是否全部为小写
str. isupper()
判断字符串是否全为大写
str.istitle()
判断是否为标题,即各单词首字母大写
>>>'word1 Word2'.istitle()
False
str. isspace()
判断字符串是否是空白(空格、制表符、换行符等)字符,没有任何字符是不算是空白。
str. isidentifier()
判断是否满足标识符定义规则
str. isprintable()
判断是否是可打印字符(例如制表符、换行符就不是可打印字符,但空格是)
4.2大小写转换
函数 | 描述 |
---|---|
str. lower() | 全部转换为小写 ,只对ASCII编码,也就是‘A-Z’有效 |
str. upper() | 全部转换为大写 |
str. capitalize() | 转换为首字母大写,其他字母小写 |
str.title() | 转换为各单词首字母大写 |
str. swapcase () | 大小写互换(大写->小写,小写->大写) |
str. casefold() | 将字符串中所有大写字符转换为小写。与 lower() 相似,但它对非汉语或英文的其他语言也有效 |
>>> 'A'.casefold() == 'a'.casefold()
True
4.3字符串的填充与对齐
str.center (width[, fillchar])
字符串居中,左右两边使用fillchar进行填充,使得整个字符串的长度为width。
str. ljust (width[, fillchar])
左对齐
str. rjust (width[, fillchar])
右对齐
ljust()使用fillchar填充在字符串S的右边,使得整体长度为width, rjust()则是填充在左边
str.zfill(width)
前方补0
用0填充在字符串S的左边使其长度为width。如果S前有正负号±,则0填充在这两个符号的后面,且符号也算入长度。
注意:以上函数如果width小于字符串的长度,则无法填充直接返回字符串本身(不会创建新字符串对象);fillchar默认为空格。
str. expandtabs ([tabsize])将字符串中的制表符扩展为若干个空格, tabsize默认为8
4.4字符串的修剪
➢ str. strip([chars)
——移除左右两边的字符chars。
➢ str. Istrip ([chars])
——移除左边的字符chars。
➢ str. rstrip ([chars])
——移除右边的字符chars。
如果不指定chars或者指定为None,则默认移除空白(空格、制表符、换行符)。唯一需要注意的是, chars可以是多个字符序列。在移除时,只要是这个序列中的字符,都会被移除。
4.5字符串的测试与查找
str. startswith (prefix[, start[, end]])
str. endswith(suffix[, start[, end]])
➢endswith()检查字符串str是否以suffix结尾,返回布尔值的True和False, suffix可以是一个元组(tuple),可以指定起始 start和结尾end的搜索边界。
➢startswith()用来判断字符串str是否是以prefix开头。
注意:suffix是元组时,只要元组中任意一个元素满足endswith的条件,就返回True。
str. count (sub[, start[, end]])
➢返回字符串str中子串sub出现的次数,可以指定从哪里开始计算(start)以及计算到哪里结束(end),索引从0开始计算不包括end边界
str. find (sub[, start[, end]])
str.rfind (sub[, start[, end]])
str. index (sub[, start [, end]])
str.rindex (sub[, start[, end]])
➢find()搜索字符串S中是否包含子串sub,如果包含,则返回sub的索引位置,否则返回"-1"。可以指定起始start和结束 end的搜索位置
➢index()和find()一样,唯一不同点在于当找不到子串时,index()将抛出ValueError错误。
➢rfind()则是返回搜索到的最右边子串的位置,如果只搜索到一个或没有搜索到子串,则和find()是等价的。
同理rindex().
4.6字符串的替换
str. replace (old, new[, count])
·将字符串中的子串old替换为new字符串,如果给定count,则表示只替换前count个old子串。如果S中搜索不到子串 old,则无法替换,直接返回字符串S(不创建新字符串对象)。
str. expandtabs (N)
将字符串str中的\t替换为一定数量的空格。默认N=8,注意, expandtabs(8)不是将t直接替换为8个空格。例如xyztab’.expandtabs()会将 替换为5个空格,因为"xyz"占用了3个字符位。所以,在替换"\t"为空格时,会减掉"\t"前面的字符数量。如果"\t"的前面正好没有字符,则直接将"\t"替换为N个空格。另外,它不会替换换行符(\n或\r)。
str.translate (table)
static str. maketrans (x, y[, z]])
str.maketrans()生成一个字符一一映射的table,然后使用translate(table)对字符串str中的每个字符进行映射。
translate()实现的功能和Linux中的tr命令是类似的
注意, maketrans(x[, y[, z]])中的x和y都是字符串,且长度必须相等。
如果maketrans(x[, y[, z]])给定了第三个参数z,则这个参数字符串中的每个字符都会被映射为None.
3.7字符串的拆分与组合
str. split (sep=None, maxsplit=-1)
str. rsplit (sep=None, maxsplit=-1)
str. splitlines ([keępends=True])
都是用来分割字符串,并生成一个列表。
➢split()根据sep对str进行分割, maxsplit用于指定分割次数,如果不指定maxsplit或者给定值为"-1",则会从左向右搜索并且每遇到sep一次就分割直到搜索完字符串,如果不指定sep或者指定为None,则改变分割算法:以空格为分隔符,且将连续的空白压缩为一个空格.
➢rsplit()和split()是一样的,只不过是从右边向左边搜索
➢splitlines()专门用来分割换行符。虽然它有点像split(’\n’)或split(’\r\n’),但它们有些区别.
➢splitines()中可以指定各种换行符,常见的是\n,\r,\r\n.如果指定keepends为True,则保留所有的换行符。
str. partition (sep)
str. rpartition (sep)
搜索字符串str中的子串sep,并从sep处对str进行分割,最后返回一个包含3元素的元组: sep左边的部分是元组的第一个元素, sep自身是元组的第二个元素, sep右边是元组的第三个元素
partition(sep)从左边第一个sep进行分割, rpartition(sep)从右边第一个sep进行分割。
>>> print("sunny something some".partition("me"))
('sunny so', 'me', 'thing some')
>>> print("sunny something some".rpartition("me"))
('sunny something so', 'me', '')
如果搜索不到sep,则返回的3元素元组中,有两个元素为空。
>>> print("sunny".partition("me"))
('sunny', '', '')
partition()是后两个元素为空, rpartition()是前两个元素为空。
str. join(iterable)
将可迭代对象(iterable)中的元素使用str连接起来。注意, iterable中必须全部是字符串类型,否则报错。
可迭代对象(iterable)可以暂时理解为:字符串string、列表list、元组tuple、字典dict,集合set.
>>> "sunny".join(('1','2','es'))
'1sunny2sunnyes'