上篇介绍了序列类型通用的操作符,以及序列类型的内建函数。本篇将着重介绍下字符类型的操作符以及常用的字符类型的内建函数。
字符串
字符串由引号包含的字符来定义,是不可变类型。
格式化操作符
以下列出只适用于字符串的操作符及辅助指令。
| 格式化操作符 | 转换方式 |
|---|---|
| %c | 转换成字符(ASII码值,或者长度为一的字符串) |
| %r | 优先用repr()函数进行字符串转换 |
| %s | 优先用str()函数进行字符串转换 |
| %d/%i | 转换成有符号的十进制数 |
| %u | 转换成无符号的十进制数 |
| %o | 转换成无符号的八进制数 |
| %x/%X | 转换成无符号的十六进制数(x/X代表转换后的字符大小写) |
| %e/%E | 转换成科学计数法 |
| %f/%F | 转换成浮点数 |
| %g/%G | %e,%f/%E,%F的简写 |
| %% | 输出% |
格式化操作符辅助指令
| 符号 | 作用 |
|---|---|
| * | 定义宽度或者小数点精度 |
| - | 用作左对齐 |
| + | 在证书前显示加号(+) |
| <\sp> | 在正数前显示空格 |
| # | 在八进制数前面显示’0’,在十六进制数字前显示’0x’或者’0X’ |
| 0 | 在数字前填充’0’而不是默认的空格 |
| % | ‘%%’输出单一的% |
| (var) | 映射变量 |
| m.n | m是显示的最小总宽度,n是小数点后的位数 |
下面展示一个把字典类型的参数提供给格式化操作符的例子。(注意不要遗漏类型转换的符号)
>>> 'There are %(howmany)d %(lang)s Quotation Symbols' %\
... {'lang':'Python','howmany':3}
'There are 3 Python Quotation Symbols'
除了字符串操作符,这里还要介绍一个字符串模板(Template)可以像在shell中一样使用$符号
Template对象中有两个方法
- substitute() 在缺少key时,会报出KeyError的异常。
- safa_substitute() 在缺少key时,直接输出字符串。
>>> from string import Template
>>> s = Template('There are ${howmany} ${lang} Quotation Symblos')
>>>
>>> print s.substitute(lang='Python',howmany=3)
There are 3 Python Quotation Symblos
>>>
>>> print s.substitute(lang='Python')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/string.py", line 176, in substitute
return self.pattern.sub(convert, self.template)
File "/usr/lib/python2.7/string.py", line 166, in convert
val = mapping[named]
KeyError: 'howmany'
>>>
>>> print s.safe_substitute(lang='Python')
There are ${howmany} Python Quotation Symblos
原始字符串操作符(r/R)
在字符串的引号前面加上r或者R,引号中所有的特殊字符串表示为本为其本意。r或者R必须紧挨着第一个引号前面。
Unicode字符串操作符(u/U)
将标准字符串或者是包含Unicode字符的字符串转换为完全的Unicode字符串对象。
需要注意的是:Unicode字符串必须出现再原始字符串前面。
>>> print 'Hello \nWorld!'
Hello
World!
>>> print r'Hello \nWorld!'
Hello \nWorld!
>>> u'Hello \nWorld!'
u'Hello \nWorld!'
>>> ur'Hello \nWorld!'
u'Hello \\nWorld!'
字符串内建函数
以下要介绍的是字符串类型的内建方法
| 方法 | 描述 |
|---|---|
string.capitalize() | 将字符串的第一个字母大写 |
string.center(width) | 返回一个原字符串居中,并使用空格填充至width长度的新字符串。 |
string.count(str,beg=0,end=len(string)) | 返回str在string中出现的次数,如果beg和end指定,则返回指定范围内str出现的次数。 |
string.decode(decoding='UTF-8',errors='strict') | 以decoding指定的编码格式解码string,如果出错默认报一个ValueError的异常,除非errors指定’ignore’或’replace’ |
string.encode(encoding='UTF-8',errors='strict') | 以encoding指定的编码格式编码string,如果出错默认报一个ValueError的异常,除非errors指定’ignore’或’replace’ |
string.endswith(obj,beg=0,end=len(string)) | 检查字符串是否以obj结尾,指定返回的话,则判定指定范围是否以obj结尾,是则返回True,否则返回False。 |
string.expandtabs(tabsize=8) | 将字符串中的tab转换为空格,默认的空格数tabsize是8。 |
string.find(str,beg=0,end=len(string)) | 检查str是否出现在string中,指定范围则检查是否在指定的范围中出现,是则返回开始的索引值,否则返回-1。 |
string.index(str,beg=0,end=len(string)) | 和find()方法一样,如果str不在string中时报出异常。 |
string.isalnum() | string中至少有一个字符并且所有的字符都是字母或者数字则返回True,否则返回False。 |
string.isalpha() | string中至少有一个字符并且所有的字符都是字母则返回True,否则返回False。 |
string.isdecimal() | 如果string中只包含十进制数,则返回True,否则返回False。 |
string.isdigit() | 如果string中只包含数字,则返回True,否则返回False。 |
string.islower() | 如果string中至少包含一个区分大小写的字符,并且所有的区分大小写的字符都是小写,则返回True,否则返回False。 |
string.isnumeric() | 如果string中只包含数字字符,则返回True,否则返回False。 |
string.isspace() | 如果string中只包含空格则返回True,否则返回False。 |
string.istitle() | 如果string是标题化的则返回True,否则返回False。 |
string.isupper() | 如果string中至少包含一个区分大小写的字符,并且所有的区分大小写的字符都是大写,则返回True,否则返回False。 |
string.join(seq) | 以string作为分隔符,将seq中的所有元素合并为一个新的字符串。 |
string.ljust(width) | 返回一个左对齐,并用空格填充至width长度的字符串。 |
string.lower() | 转换string中的所有字符为小写字符。 |
string.lstrip() | 截掉字符左边的空格。 |
string.partition(str) | 类似find()和split()的结合体,以str出现的第一个位置起,将string分割为一个3元祖,(string_pre_str,str,string_post_str),如果string中不包含str,则string_pre_str=string。 |
string.replace(str1,str2,num=string.count(str1)) | 将string中的str1替换成str2,num指定了替换的次数,默认都替换。 |
string.rfind(str,beg=0,end=len(string)) | 类似与find(),不过是从右边开始查找。 |
string.rindex(str,beg=0,end=len(string)) | 类似于index(),不过是从右边开始查找。 |
string.rjust(width) | 返回一个右对齐,并用空格填充至width长度的字符串。 |
string.rpartition(str) | 类似于partition()函数,但是是从右边开始查找。 |
string.rstrip() | 删除string末尾的空格。 |
string.split(str="",num=string.count(str)) | 以str为分割符切片string,如果num指定,则只分割num个字符串。 |
string.splitlines(num=string.count('\n')) | 按照行分割,返回一个包含各行作为元素的列表,如果num指定,则只切片num行。 |
string.startswith(obj,beg=0,end=len(string)) | 检查字符串是否以obj开头,是则返回True,否则返回False,如果指定范围,则在指定范围内查找。 |
string.strip([obj]) | 在string上执行lstrinp()和rstrip() |
string.swapcese() | 反转string中的大小写 |
string.title() | 返回标题化的string,即是所有的单词均以大写开头,其余字母小写。 |
string.tanslate(str,del="") | 根据str给出的表,转换string字符,要过滤掉的字符放在del参数中。 |
string.upper() | 转换string中的小写字母为大写 |
string.zfill(width) | 返回长度为width的字符串,元字符串右对齐,前面填充0 |
最后对字符串的编解码做些说明,为了是程序拥有更好的兼容性,尽量是用Unicode字符串。以下为一些建议:
- 程序中出现字符串时一定要加前缀u。
- 不要使用str()函数,尽量使用unicode()代替。
- 不要使用过时的string模块—-如果传给它的是非ASCII字符,会出现问题。
- 不到必要的时候不要在程序中编解码Unicode字符。只在要写入文件或数据库或者网络时,才调用encode()函数,相应的只在需要把数据度读出来的时候才调用decode()函数。
本文详细介绍Python中字符串的操作符、格式化方法以及内建函数。包括字符串格式化操作符的使用方法,如%c、%s等;字符串模板的使用,如Template类的substitute()和safe_substitute()方法;以及字符串内建函数的使用,如capitalize()、center()等。
593

被折叠的 条评论
为什么被折叠?



