Python中处理文本数据使用由Unicode编码构成的不可变序列字符串—str对象。字符串表达形式如下:
.单引号 ‘This article describes information about str object’
.双引号 “This article describes information about str object”
.三重引号 ‘’‘ This article describes information about str object’’’
使用三重引号的字符串可以跨越多行,并且所有的空字符串都包含在字符串值中。
str类型同样是不可变类型,除了上面三种显式构建方式之外,也同样有构建函数进行构建
字符串构建
构建函数:
函数 | 释义 |
---|---|
str(object=b’’) | 返回构建的字符串 |
str(object=’’, encoding=’uft-8’, errors=’strict’) | 返回由object构成的字符串,若object为空,则返回空字符串,如果encoding或errors均未设置str(object) 返回 object.__str__() ,这是 object 的“非正式”或格式良好的字符串表示。 对于字符串对象,这是该字符串本身。 如果 object 没有 __str__() 方法,则 str() 将回退为返回 repr(object) 。如果 encoding 或 errors 至少给出其中之一,则 object 应该是一个 bytes-like object (例如 bytes 或 bytearray )。 在此情况下,如果 object 是一个 bytes (或 bytearray ) 对象,则 str(bytes, encoding, errors) 等价于 bytes.decode(encoding, errors) 。 否则的话,会在调用 bytes.decode() 之前获取缓冲区对象下层的 bytes 对象。 请参阅 二进制序列类型 — bytes, bytearray, memoryview 与 缓冲协议 了解有关缓冲区对象的信息。 |
io.StringIO() | Text I/O内存缓冲区,若调用close()方法则缓冲区结束 |
>>> str(b'Zoot!')
"b'Zoot!'"
字符串访问
可以直接通过index的方式访问字符串中的字符,如字符串s = ‘abcdfdeff’, s[0] = ‘a’, s[0:3]=’abc’, s[0:3]也可以写成s[:3],代表从0个位置开始,取第3个字符之前的字节,第一个数字代表从第几个字符开始,:后面代表取到第几个字节(最后一个字节的字符不包含在内)。
因为不存在单独的字符类型,对字符串做索引操作的时候会产生长度为1的字符串,即s[0] == s[0:1]
字面值
字符串的字面值定义如下:
stringliteral ::= [stringprefix](shortstring | longstring)
stringprefix ::= "r" | "u" | "R" | "U" | "f" | "F"
| "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring ::= "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::= shortstringchar | stringescapeseq
longstringitem ::= longstringchar | stringescapeseq
shortstringchar ::= <any source character except "\" or newline or the quote>
longstringchar ::= <any source character except "\">
stringescapeseq ::= "\" <any source character>
bytesliteral ::= bytesprefix(shortbytes | longbytes)
bytesprefix ::= "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
shortbytes ::= "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes ::= "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::= shortbyteschar | bytesescapeseq
longbytesitem ::= longbyteschar | bytesescapeseq
shortbyteschar ::= <any ASCII character except "\" or newline or the quote>
longbyteschar ::= <any ASCII character except "\">
bytesescapeseq ::= "\" <any ASCII character>
第一种字面值是描述str类型,第二种字面值是描述bytes类型。
如果字符串前面带有’b’或’B’ 等bytesprefix类型,则生成的是bytes类型;如果字符串前面带有’r’,’u’则生成的是str类型;如果字符串前面带有’r’或’R’,则代表字符串不会进行转义。
为了与 Python 2 系列的向下兼容,再次允许字符串字面值使用 u
前缀。 它对字符串字面值的含义没有影响,并且不能与 r
前缀同时出现。
转义序列&行边界
表示符 | 描述 |
---|---|
\n | 换行 |
\r | 回车 |
\r\n | 回车+换行 |
\v 或\x0b | 行制表符-纵向 |
\f或\x0c | 换表单 |
\x1c | 文件分隔符 |
\x1d | 组分隔符 |
\x1e | 记录分隔符 |
\x85 | 下一行 |
\u2018 | 行分隔符 |
\u2029 | 段分隔符 |
\ | 在行尾时为续行符 |
\ | 反斜扛符号 |
\’ | 单引号 |
\” | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\000 | 空 |
\t | 横向制表符 |
\o | 八进制数 |
\x | 十六进制数 |
\other | 其它的字符以普通格式输出 |
字面值拼接
多个相邻的字符串或字节串字面值 (以空白符分隔),所用的引号可以彼此不同,其含义等同于全部拼接为一体。因此, "hello" 'world'
等同于 "helloworld"
。此特性可以减少反斜杠的使用,以方便地将很长的字符串分成多个物理行,甚至每部分字符串还可分别加注释
字符串常量
字符串定义的常量有:
常量 | 描述 |
---|---|
ascii_letters | ascii_lowercase和asscii_uppercase的拼接组合 |
ascii_lowercase | 26个小写字母’abcdefghijklmnopqrstuvwxyz’,不依赖本地,不可改变 |
ascii_uppercase | 26个大写字母’ABCDEFGHIJKLMNOPQRSTUVWXYZ’,不依赖本地,不可改变 |
digits | 字符串 '0123456789' |
hexdigits | 字符串 '0123456789abcdefABCDEF' |
octdigits | 字符串 '01234567' |
punctuation | c标准库中的ASCII标点符号 |
printable | 可打印的ASCII常量,是digts、ascii_letters、punctuation、whitespace的组合 |
whitespace | 所有空白符的ASCII字符,如空格, tab,换行,回车,换页,制表符等 |
字符串格式化
一般字符格式化
string 模块中提供来一般字符格式化转换类,利用转换类中的转换函数可以格式化字符串。格式转换类为string模块中的Formatter类,Formatter类中的转换函数有:
函数 | 描述 |
---|---|
format(format_string, *args, **kwargs) 3.5版本后已移除 | 返回一串字符串,format_string为输入的格式化字符,是vformat函数的包装 |
vformat(format_string, args, kwargs) | 完成字符格式化实际工作,虽然vformat()作为一个单独的函数使用,但是其实它是一些列函数的组合,vformat函数会调用表格后面的函数来完成字符串的格式化。 |
parse(format_string) | 循环检测fromat_string,并返回一个iterable格式的元组(literal_text, field_name, format_spec, conversion).vformat()使用该函数将字符串拆分为文本或替换字段。概念上元组中的值表示一个后面跟着替换字符的文本,如果文本为空或文本后面跟着两个替换字符,则文本将是零长度字符串。如果文本不为空,但是后面没有跟着替换字符,则元组中的自断值都是None |
get_field(field_name, args, kwargs) | 返回parse()返回的field_name,args和kwargs都是vformat()函数传入的参数 |
get_value(key, args, kwargs) | 检索给定的key值,给定的key值是整数或字符类型中的一种,如果是一个整数,则代表args参数中的位置坐标,如果是字符串则代表kwargs参数中的名称。args参数设置为vformat()的位置参数列表,kwargs参数设置为关键字参数字典。 |
check_unused_args(used_args, args, kwargs) | 对未使用的参数进行检查,参数来源是传给vformat函数的参数,以及在上面步骤中未使用的args参数 |
format_fiedl(value, format_spec) | format_field()只调用内置的global format()。提供方法以便子类可以重写。 |
convert_field(value,conversion) | 转换给定转换类型(如parse()方法返回的元组)的值(由get_field()返回)。默认的转换类型‘s’ (str), ‘r’ (repr) 和 ‘a’ (ascii) |
格式化字符串语法
str.format()方法和Formatter类为格式化字符串提供相同的语法,但是仍有一些不同。
格式字符串包含由大括号包围的“替换字段”{替换值}。不包含在大括号中的任何内容都被视为文本,它将原封不动地复制到输出中。如果需要在文本中包含大括号字符,则可以通过加倍对其进行转义: 。在一些比较正式的语法中,替换字段可以以字段名开始,该字段名指定要格式化其值并插入到输出中而不是替换字段中的对象。字段“名称”后面可选跟一个转换字段,转换字段前面加一个感叹号“!”和格式“spec”,前面是冒号“:”。它们为替换值指定非默认格式。
字段“名称”本身以数字或关键字的参数开头。如果是数字,则表示位置参数;如果是关键字,则表示命名关键字参数。如果格式字符串中的数字arg_名称按顺序是0、1、2,…,则可以全部省略,数字0、1、2,…)将自动按该顺序插入。因为arg_名称不是用引号分隔的,所以不能在格式字符串中指定任意字典键(例如字符串“10”或“:-]”)。参数名后面可以跟任意数量的索引或属性表达式。表单的表达式“.name”使用getattr()选择命名属性,而表单的表达式“[index]”使用getitem()进行索引查找。
3.1版本中 str.format()可以省略位置参数说明符,因此’{}{}’.format(a,b)等同于“0 1”格式 ‘{0} {1}’.format(a, b)。 3.5版本之后格式化程序可以省略位置参数说明符。
转换字段在格式化前导致类型强制。通常,格式化值的工作是由值本身的format()方法完成。但是,在某些情况下,需要强制将类型格式化为字符串,从而覆盖其自己的格式化定义。通过在调用format()之前将值转换为字符串,可以绕过正常的格式化逻辑。例如'!s'
会先调用 str()函数进行转换 , '!r'
会先调用repr()函数进行转换以及!a
会先调用ascii()函数进行转换。
format_spec
字段包含如何显示值的说明,包括字段宽度、对齐方式、填充、小数精度等详细信息。每个值类型都可以定义自己的Mini-Language或格式说明。format_spec
字段还可以包含嵌套的替换字段。这些嵌套的替换字段可能包含字段名、转换标志和格式规范,但不允许进行更深层次的嵌套。format_spec
中的替换字段在格式化format_spec字符串之前被替换。这样造成可以允许动态指定值的格式。
通过位置访问参数进行替换:
>>> '{0},{1},{2}'.format('a','b','c')
'a,b,c'
>>> '{},{},{}'.format('a','b','c')
'a,b,c'
>>> '{2},{1},{0}'.format('a','b','c')
'c,b,a'
>>> '{},{},{}'.format(*'abc')
'a,b,c'
>>> '{2},{1},{0}'.format(*'abc')
'c,b,a'
>>> '{0},{1},{0}'.format('abra', 'cad')
'abra,cad,abra'
通过name访问参数进行替换:
>>> 'Coordinates: {latitude},{longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N,-115.81W'
>>> "I'm a girl and my job is {jobname}".format(jobname='Data Analysistic')
"I'm a girl and my job is Data Analysistic"
通过属性访问参数进行替换:
>>> c = 3-5j
>>> ('复数{0}是由实部{0.real} 和 虚部{0.imag}构成').format(c)
'复数(3-5j)是由实部3.0 和 虚部-5.0构成'
>>> class Point:
def __init__(self, x, y):
self.x, self.y = x, y
def __str__(self):
return 'Point({self.x}, {self.y})'.format(self=self)
>>> str(Point(4,2))
'Point(4, 2)'
通过items访问参数进行替换:
>>> coord = (3,4)
>>> 'X:{0[0]}; Y:{0[1]}'.format(coord)
'X:3; Y:4'
替换%s和%r:
>>> "repr() shows quotes:{!r}; str() doesn't:{!s}".format('test1','test2')
"repr() shows quotes:'test1'; str() doesn't:test2"
对齐文本并指定宽度:
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered')
'***********centered***********'
替换%+f, %-f, % f以及指定符号:
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered')
'***********centered***********'
替换%x,%o以及将值转换为不同的基数:
>>> "int:{0:d}; hex:{0:x}; oct:{0:o}; bin:{0:b}".format(42)
'int:42; hex:2a; oct:52; bin:101010'
>>> "int:{0:d}; hex:{0:#x}; oct:{0:#o}; bin:{0:#b}".format(42)
'int:42; hex:0x2a; oct:0o52; bin:0b101010'
>>>
使用逗号,
作为千位分隔符:
>>> '{:,}'.format(1234567890)
'1,234,567,890'
>>>
百分数形式替换:
>>> points = 19
>>> total = 22
>>> 'Correct answers:{:.2%}'.format(points/total)
'Correct answers:86.36%'
特殊类型格式转换:
>>> import datetime
>>> d = datetime.datetime(2018,5,4,21,54,16)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2018-05-04 21:54:16'
嵌套参数和更复杂的示例:
>>> for align, text in zip('<^>', ['left', 'center', 'right']):
'{0:{fill}{align}16}'.format(text, fill=align, align=align)
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>> octets = [192,168,0,1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>> width = 5
>>> for num in range(5, 12):
for base in 'dXob':
print('{0:{width}{base}}'.format(num, base=base, width=width), end='')
print()
5 5 5 101
6 6 6 110
7 7 7 111
8 8 10 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
>>>
格式化字符Mini-Language
格式化符号
符号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整数 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化化浮点数字,可以指定小数点后的精度 |
%e | 用科学记数法格式化浮点数 |
%E | 作用同%e,用科学记数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
格式化旗标
标志 | 描述 |
---|---|
‘#’ | 值的转换将使用”替代形式” |
0 | 转换将为数字值填充零字符 |
‘-‘ | 转换值左对齐,如果同时给出’0’转换,则会覆盖’0’转换 |
‘ ‘ | (空格) 符号位转换产生的正数(或空字符串)前将留出一个空格 |
‘+’ | 符号字符 ('+' 或 '-' ) 将显示于转换结果的开头(会覆盖 “空格” 旗标) |
格式化类型
转换符 | 描述 |
---|---|
‘d’ | 有符号十进制整数 |
‘i’ | 有符号十进制整数 |
‘o’ | 有符号八进制数 |
‘u’ | 无符号十进制整数 |
‘a’ | 字符串(使用ascii()转换Python对象) |
‘e’ | 浮点指数格式(小写) |
‘E’ | 浮点指数格式(大写) |
‘f’ | 浮点十进制格式 |
‘F’ | 浮点十进制格式 |
‘g’ | 浮点格式,如果指数小于 -4 或不小于精度则使用小写指数格式,否则使用十进制格式。 |
‘G’ | 浮点格式。 如果指数小于 -4 或不小于精度则使用大写指数格式,否则使用十进制格式。 |
‘c’ | 单个字符(接受整数或单个字符的字符串) |
‘r’ | 字符串(使用repr()转换Python对象) |
‘s’ | 字符串(使用str()转换Python对象) |
‘x’ | 有符号十六进制数(小写) |
‘X’ | 有符号十六进制数(大写) |
‘%’ | 不转换参数,在结果中输出一个’%’字符 |
模板字符串
模板字符串提供来更简单的字符串替换形式,这样做重要的一点是国际化(i18n),较简单的语法和功能比Python其它内置字符串格式化更容易链接编译。
模板字符串规则
模板字符串支持基于$的替换,使用以下规则:
. $$ is an escape; it is replaced with a single $
.$idenfifier 匹配字典中的名为’idenfifier’的key。默认情况下,’identifier’仅限于以下划线或ASCII字母开头的任何不区分大小写的ASCII字母数字字符串(包括下划线), \$ 字符后的第一个非标识字符代表终止字符
.${identifier} 和 \$identifier 含义相同。当有效的标识字符跟在占位符之后但不是占位符的一部分(如\${noun}ification)的时候,必须采用\${identifier}的写法
字符串中出现的任何其他$都将导致引发ValueError。
木板字符串函数
string模块提供了Temple类执行以上规则,Temple类的方法有:
函数 | 描述 |
---|---|
class string.Template(template) | 构造函数,参数template是模板字符串 |
substitute(mapping, **kwds) | 执行模板替换,返回新字符串。映射任何类似字典的对象,其键与模板中的占位符匹配。也可以提供关键字参数,其中关键字是占位符。当同时给出映射和kwds同时给出时,kwds中的占位符优先。 |
safe_substitue(mapping, **kwds) | 与substitute()类似,但不同的是如果在映射和kwd中缺少占位符,不会引发keyError异常,否则原始占位符将完整显示在结果字符串中。此外,任何以\$形式出现的字符串都不会引发VauleError。此方法被称为safe 替换函数,是因为当其它异常产生时,该方法总是尝试返回可用的字符串而不是引发异常。从另一种情况来说,safe_substitue()之所以称之为安全的方法,并非是因为它真正安全,而是因为它会默默地忽略格式错误的模板字符串,错误的模板字符串包含格式不完整的分隔符、不匹配的大括号、不是有效Python占位符的标识符。 |
template() | 模板实例提供的公共数据属性,返回提供给Template参数的模板字符串值。一般来说,不应该更改它,但访问的时候也并不能指定为只读。 |
>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='running')
'tim likes running'
>>> d = dict(who='tim')
>>>#制造KeyError
>>> Template('Give $who $100').substitute()
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
Template('Give $who $100').substitute()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/string.py", line 130, in substitute
return self.pattern.sub(convert, self.template)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/string.py", line 123, in convert
return str(mapping[named])
KeyError: 'who'
>>>#制造valueError
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
Template('Give $who $100').substitute(d)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/string.py", line 130, in substitute
return self.pattern.sub(convert, self.template)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/string.py", line 127, in convert
self._invalid(mo)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/string.py", line 103, in _invalid
(lineno, colno))
ValueError: Invalid placeholder in string: line 1, col 11
>>>#制造keyError
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
Template('$who likes $what').substitute(d)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/string.py", line 130, in substitute
return self.pattern.sub(convert, self.template)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/string.py", line 123, in convert
return str(mapping[named])
KeyError: 'what'
>>>#用safe_substitute函数避免Error
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what'
模板字符串高级用法
高级用法:
可以派生模板的子类,以自定义占位符语法、分隔符或用于分析模板字符串的整个正则表达式。为此,可以重写这些类属性:
delimiter – 描述引入分隔符的占位符的文本字符串,默认值为$。注意,这不能是正则表达式,如果想要传入正则表达式,需要根据具体的规则在此字符串上调用re.escape()。
idpattern –描述无效占位符的正则表达式(括号将根据需要自动添加)。默认值是正则表达式(?-i:[_a-zA-Z][_a-zA-Z0-9]*)
flags –正则表达式标志,在编译期间将正则表达式转换为实际应用规则时被使用。默认值是re.VERBOSE。值得注意的是re.VERBOSE无论如何都会被添加到标志中,所以自定义的ID模式必须符合详细的正则表达式规则。
或者,可以通过重写类属性模式来提供整个正则表达式模式。这么做的前提是该值必须是具有四个捕获组组成的正则表达式对象, 捕获组与给出的规则以及无效的占位符规则相对应:
escaped – 该捕获组与默认模式中的转义序列(例如$$)匹配
named – 该捕获组与无空格的占位符名称匹配,并且不能包含分隔符
braced – 该捕获组与括号内的占位符名称匹配,不能包含分隔符或括号
invalid – 该捕获组与任何其他分隔符模式(通常是单个分隔符)匹配,它应该出现在正则表达式的最后一个
字符串方法
函数 | 释义 |
---|---|
str.capitalize() | 返回字符串的副本,首个字符大写,其余为小写 |
str.casefold() | 返回字符串消除大小写的副本,可以用于忽略大小写的匹配 |
str.center(width, fillchar) | 返回长度为 width 的字符串,原字符串在其正中。 使用指定的 fillchar 填充两边的空位(默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本 |
str.count(sub, start, end) | 反回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。 可选参数 start 与 end 会被解读为切片表示法。 |
str.encode(encoding=”utf-8”, errors=”strict”) | 返回原字符串编码为字节串对象的版本。 默认编码为 'utf-8' 。 可以给出 errors 来设置不同的错误处理方案。 errors 的默认值为 'strict' ,表示编码错误会引发 UnicodeError 。 其他可用的值为 'ignore' , 'replace' , 'xmlcharrefreplace' , 'backslashreplace' 等。 |
str.endswith(suffix, start, end) | 如果字符串是以指定的suffix结束则返回True,否则返回Falsesuffix 也可以为由多个供查找的后缀构成的元组。 如果有可选项 start,将从所指定位置开始检查。 如果有可选项 end,将在所指定位置停止比较。 |
str.expandtabs(tabsize=8) | 返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制表符宽度。 每 tabsize 个字符设为一个制表位(默认值 8 时设定的制表位在列 0, 8, 16 依次类推)。 要展开字符串,当前列将被设为零并逐一检查字符串中的每个字符。 如果字符为制表符 (\t ),则会在结果中插入一个或多个空格符,直到当前列等于下一个制表位。 (制表符本身不会被复制。) 如果字符为换行符 (\n ) 或回车符 (\r ),它会被复制并将当前列重设为零。 任何其他字符会被不加修改地复制并将当前列加一,不论该字符在被打印时会如何显示 |
str.find(sub,start,end) | 返回子字符串 sub 在 s[start:end] 切片内被找到的最小索引。 可选参数 start 与 end 会被解读为切片表示法。 如果 sub 未被找到则返回 -1 。find()方法只在需要知道 sub 所在位置时使用。 要检查 sub 是否为子字符串,请使用in 操作符 |
str.format(*args,**kwargs) | 执行字符串格式化操作。 调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域。 每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。 返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。当使用 n 类型 (例如: '{:n}'.format(1234) ) 来格式化数字 (int、float、complex、decimal 及其子类) 的时候,该函数会临时性地将 LC_CTYPE 区域设置为 LC_NUMERIC 区域以解码 localeconv() 的 decimal_point 和 thousands_sep 字段,如果它们是非 ASCII 字符或长度超过 1 字节的话,并且 LC_NUMERIC 区域会与 LC_CTYPE 区域不一致。 这个临时更改会影响其他线程。 |
str.format_map(mapping) | 类似于 str.format(**mapping) ,不同之处在于 mapping 会被直接使用而不是复制到一个 dict。 适宜使用此方法的一个例子是当 mapping 为 dict 的子类的情况。 |
str.index(sub, start, end) | 类似于 find(),但在找不到子类时会引发 ValueError。 |
str.isalnum() | 如果字符串中至少有一个字符且所有字符均为字母或数字则返回真值,否则返回假值。 |
str.isalpha() | 如果字符串中至少有一个字符且所有字符均为字母则返回真值,否则返回假值 |
str.isdecimal() | 如果字符串中至少有一个字符且所有字符均为十进制数字符则返回真值,否则返回假值 |
str.isdigit() | 如果字符串中至少有一个字符且所有字符均为数字字符则返回真值,否则返回假值。 |
str.isidentifier() | 如果字符串根据语言定义属于有效的标识符则返回真值 |
str.islower() | 如果字符串中至少有一个区分大小写的字符, 字符均为小写则返回真值,否则返回假值。 |
str.isnumeric() | 如果字符串中至少有一个字符且所有字符均为数值字符则返回真值,否则返回假值。 |
str.isprintable() | 如果字符串中所有字符均为可打印字符或字符串为空则返回真值,否则返回假值。 |
str.isspace() | 如果字符串中至少有一个字符且所有字符均为空白字符则返回真值,否则返回假值。 |
str.istitle() | 如果字符串中至少有一个字符且为标题字符串则返回真值,例如大写字符之后只能带非大写字符而小写字符必须有大写字符打头。 否则返回假值。 |
str.isupper() | 如果字符串中至少有一个区分大小写的字符 具此类字符均为大写则返回真值,否则返回假值。 |
str.join(iterable) | 返回一个由 iterable 中的字符串拼接而成的字符串。 如果 iterable 中存在任何非字符串值包括 bytes 对象则会引发 TypeError。 调用该方法的字符串将作为元素之间的分隔。 |
str.ljust(width, fillchar) | 返回长度为 width 的字符串,原字符串在其中靠左对齐。 使用指定的 fillchar 填充空位 (默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本。 |
str.lower() | 返回原字符串的副本,其所有区分大小写的字符 均转换为小写。 |
str.lstrip(chars) | 返回原字符串的副本,移除其中的前导字符.chars 参数为指定要移除字符的字符串。 如果省略或为 None ,则 chars 参数默认移除空格符。 |
static str.maketrans(x,y,z) | 此静态方法返回一个可供 str.translate() 使用的转换对照表。如果只有一个参数,则它必须是一个将 Unicode 码位序号(整数)或字符(长度为 1 的字符串)映射到 Unicode 码位序号、(任意长度的)字符串或 None 的字典。 字符键将会被转换为码位序号。如果有两个参数,则它们必须是两个长度相等的字符串,并且在结果字典中,x 中每个字符将被映射到 y 中相同位置的字符。 如果有第三个参数,它必须是一个字符串,其中的字符将在结果中被映射到 None 。 |
str.partition(sep) | 在 sep 首次出现的位置拆分字符串,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。 如果分隔符未找到,则返回的 3 元组中包含字符本身以及两个空字符串。 |
str.replace(old, new, count) | 返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。 如果给出了可选参数 count,则只替换前 count 次出现。 |
str.rfind(sub, start, end) | 返回子字符串 sub 在字符串内被找到的最大(最右)索引,这样 sub 将包含在 s[start:end] 当中。 可选参数 start 与 end 会被解读为切片表示法。 如果未找到则返回 -1。 |
str.rindex(sub,start,end) | 类似于 rfind(),但在子字符串 *sub* 未找到时会引发 ValueError ttps://)。 |
str.rjust(width, fillchar) | 返回长度为 width 的字符串,原字符串在其中靠右对齐。 使用指定的 fillchar 填充空位 (默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本。 |
str.rpartition(sep) | 在 sep 最后一次出现的位置拆分字符串,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。 如果分隔符未找到,则返回的 3 元组中包含两个空字符串以及字符串本身。 |
str.rsplit(sep,maxsplit=-1) | 返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。 如果给出了 maxsplit,则最多进行 maxsplit 次拆分,从 最右边 开始。 如果 sep 未指定或为 None ,任何空白字符串都会被作为分隔符。 |
str.rstrip(chars) | 返回原字符串的副本,移除其中的末尾字符。 chars 参数为指定要移除字符的字符串。 如果省略或为 None ,则 chars 参数默认移除空格符。 |
str.split(sep, maxsplit=-1) | 返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。 如果给出了 maxsplit,则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1 个元素)。 如果 maxsplit 未指定或为 -1 ,则不限制拆分次数(进行所有可能的拆分)。如果给出了 sep,则连续的分隔符不会被组合在一起而是被视为分隔空字符串。 |
str.splitlines(keepends) | 返回由原字符串中各行组成的列表,在行边界的位置拆分。 结果列表中不包含行边界,除非给出了 keepends 且为真值。 |
str.startswith(prefix, start,end) | 如果字符串以指定的 prefix 开始则返回 True,否则返回 False。 prefix 也可以为由多个供查找的前缀构成的元组。 如果有可选项 start,将从所指定位置开始检查。 如果有可选项 end,将在所指定位置停止比较。 |
str.strip(chars) | 返回原字符串的副本,移除其中的前导和末尾字符。 chars 参数为指定要移除字符的字符串。 如果省略或为 None ,则 chars 参数默认移除空格符。 |
str.swapcase() | 返回原字符串的副本,其中大写字符转换为小写,反之亦然。 |
str.title() | 返回原字符串的标题版本,其中每个单词第一个字母为大写,其余字母为小写。 |
str.translate(table) | 返回原字符串的副本,其中每个字符按给定的转换表进行映射。 转换表必须是一个使用 __getitem__() 来实现索引操作的对象,通常为 mapping 或 sequence。 当以 Unicode 码位序号(整数)为索引时,转换表对象可以做以下任何一种操作:返回 Unicode 序号或字符串,将字符映射为一个或多个字符;返回 None ,将字符从结果字符串中删除;或引发 LookupError 异常,将字符映射为其自身。 |
str.upper() | 返回原字符串的副本,其中所有区分大小写的字符均转换为大写。 |
str.zfill(width) | 返回原字符串的副本,在左边填充 ASCII '0' 数码使其长度变为 width。 正负值前缀 ('+' /'-' ) 的处理方式是在正负符号 之后 填充而非在之前。 如果 width 小于等于 len(s) 则返回原字符串的副本。 |
str.capwords(s, sep=None) | 使用str.split()将参数拆分为单词,使用str.capitalize()将每个单词大写,并使用str.join()连接大写单词。如果可选的第二个参数sep不存在或没有,则运行的空白字符将替换为单个空格,并删除前导空格和尾随空格,否则sep用于拆分和联接单词。 |
>>> string = 'string synatx custom string formatting'
>>> string.capitalize()
'String synatx custom string formatting'
>>> string = string.capitalize()
>>> print (string)
String synatx custom string formatting
>>> string = string.casefold()
>>> print (string)
string synatx custom string formatting
>>> string.center(15, '*')
'string synatx custom string formatting'
>>> string.center(50, '*')
'******string synatx custom string formatting******'
>>> string.count('a', 0, 30)
1
>>> string.endswith('.com', 0)
False
>>> string.endswith('.com')
False
>>> '01\t012\t0123\t01234'.expandtabs()
'01 012 0123 01234'
>>> '01\t012\t0123\t01234'.expandtabs(5)
'01 012 0123 01234'
>>> string.find('f')
28
>>> 'f' in string
True
>>> 'The sum of 4 + 5 is {0}'.format(4+5)
'The sum of 4 + 5 is 9'
>>> class Default(dict):
def __missing__(self, key):
return key
>>> '{name} was born in {country}'.format_map(Default(name='Joy'))
'Joy was born in country'
>>> '{name} was born in {country}'.format_map(Default(name='Joy', country='Chinese'))
'Joy was born in Chinese'
>>> string.isalnum()
False
>>> print (string)
string synatx custom string formatting
>>> string.isalpha()
False
>>> string.isdecimal()
False
>>> string.isdigit()
False
>>> string.isidentifier()
False
>>> string.islower()
True
>>> string.isnumeric()
False
>>> string.isprintable()
True
>>> string.isspace()
False
>>> string.istitle()
False
>>> string.isupper()
False
>>> string.join(['len', 'type'])
'lenstring synatx custom string formattingtype'
>>> ' '.join(['red','blue','green'])
'red blue green'
>>> string.ljust(50, '*')
'string synatx custom string formatting************'
>>> string.partition('syn')
('string ', 'syn', 'atx custom string formatting')
>>> string.replace('s', 'S', 2)
'String Synatx custom string formatting'
>>> string.rfind('syn')
7
>>> string.rindex('syn')
7
>>> string.rjust(50, '-')
'------------string synatx custom string formatting'
>>> string.rsplit()
['string', 'synatx', 'custom', 'string', 'formatting']
>>> string.rstrip()
'string synatx custom string formatting'
>>> string.split()
['string', 'synatx', 'custom', 'string', 'formatting']
>>> string.splitlines()
['string synatx custom string formatting']
>>> string.startswith('str')
True
>>> string.strip()
'string synatx custom string formatting'
>>> string.swapcase()
'STRING SYNATX CUSTOM STRING FORMATTING'
>>> string.title()
'String Synatx Custom String Formatting'
>>> string.upper()
'STRING SYNATX CUSTOM STRING FORMATTING'
>>> string.zfill(50)
'000000000000string synatx custom string formatting'