Python 的内置字符串方法(收藏专用)

4.7k 次阅读  ·  读完需要 44 分钟

5

字符串处理是非常常用的技能,但 Python 内置字符串方法太多,常常遗忘,为了便于快速参考,特地依据 Python 3.5.1 给每个内置方法写了示例并进行了归类,便于大家索引。
PS: 可以点击概览内的绿色标题进入相应分类或者通过右侧边栏文章目录快速索引相应方法。

概览

字符串大小写转换

  • str.capitalize()

  • str.lower()

  • str.casefold()

  • str.swapcase()

  • str.title()

  • str.upper()

字符串格式输出

  • str.center(width[, fillchar])

  • str.ljust(width[, fillchar]); str.rjust(width[, fillchar])

  • str.zfill(width)

  • str.expandtabs(tabsize=8)

  • str.format(^args, ^^kwargs)

  • str.format_map(mapping)

字符串搜索定位与替换

  • str.count(sub[, start[, end]])

  • str.find(sub[, start[, end]]); str.rfind(sub[, start[, end]])

  • str.index(sub[, start[, end]]); str.rindex(sub[, start[, end]])

  • str.replace(old, new[, count])

  • str.lstrip([chars]); str.rstrip([chars]); str.strip([chars])

  • static str.maketrans(x[, y[, z]]); str.translate(table)

字符串的联合与分割

  • str.join(iterable)

  • str.partition(sep); str.rpartition(sep)

  • str.split(sep=None, maxsplit=-1); str.rsplit(sep=None, maxsplit=-1)

  • str.splitlines([keepends])

字符串条件判断

  • str.endswith(suffix[, start[, end]]); str.startswith(prefix[, start[, end]])

  • str.isalnum()

  • str.isalpha()

  • str.isdecimal(); str.isdigit(); str.isnumeric()

  • str.isidentifier()

  • str.islower()

  • str.isprintable()

  • str.isspace()

  • str.istitle()

  • str.isupper()

字符串编码

  • str.encode(encoding="utf-8", errors="strict")

大小写转换

str.capitalize()

将首字母转换成大写,需要注意的是如果首字没有大写形式,则返回原字符串。

'adi dog'.capitalize()
# 'Adi dog' 'abcd 徐'.capitalize()
# 'Abcd 徐' '徐 abcd'.capitalize()
# '徐 abcd' 'ß'.capitalize()
# 'SS'

str.lower()

将字符串转换成小写,其仅对 ASCII 编码的字母有效。

'DOBI'.lower()
# 'dobi' 'ß'.lower() # 'ß' 为德语小写字母,其有另一种小写 'ss', lower 方法无法转换
# 'ß' '徐 ABCD'.lower()
# '徐 abcd'

str.casefold()

将字符串转换成小写,Unicode 编码中凡是有对应的小写形式的,都会转换。

'DOBI'.casefold()
# 'dobi' 'ß'.casefold() #德语中小写字母 ß 等同于小写字母 ss, 其大写为 SS
# 'ss'

str.swapcase()

对字符串字母的大小写进行反转。

'徐Dobi a123 ß'.swapcase()
#: '徐dOBI A123 SS' 这里的 ß 被转成 SS 是一种大写

但需要注意的是 s.swapcase().swapcase() == s 不一定为真:

u'\xb5'
# 'µ' u'\xb5'.swapcase()
# 'Μ' u'\xb5'.swapcase().swapcase()
# 'μ' hex(ord(u'\xb5'.swapcase().swapcase()))
Out[154]: '0x3bc'

这里 'Μ'(是 mu 不是 M) 的小写正好与 'μ' 的写法一致。

str.title()

将字符串中每个“单词”首字母大写。其判断“单词”的依据则是基于空格和标点,所以应对英文撇好所有格或一些英文大写的简写时,会出错。

'Hello world'.title()
# 'Hello World' '中文abc def 12gh'.title()
# '中文Abc Def 12Gh' # 但这个方法并不完美:
"they're bill's friends from the UK".title()
# "They'Re Bill'S Friends From The Uk"

str.upper()

将字符串所有字母变为大写,会自动忽略不可转成大写的字符。

'中文abc def 12gh'.upper()
# '中文ABC DEF 12GH'

需要注意的是 s.upper().isupper() 不一定为 True

字符串格式输出

str.center(width[, fillchar])

将字符串按照给定的宽度居中显示,可以给定特定的字符填充多余的长度,如果指定的长度小于字符串长度,则返回原字符串。

'12345'.center(10, '*')
# '**12345***' '12345'.center(10)
# ' 12345 '

str.ljust(width[, fillchar]); str.rjust(width[, fillchar])

返回指定长度的字符串,字符串内容居左(右)如果长度小于字符串长度,则返回原始字符串,默认填充为 ASCII 空格,可指定填充的字符串。

'dobi'.ljust(10)
# 'dobi ' 'dobi'.ljust(10, '~')
# 'dobi~~~~~~' 'dobi'.ljust(3, '~')
# 'dobi' 'dobi'.ljust(3)
# 'dobi'

str.zfill(width)

用 '0' 填充字符串,并返回指定宽度的字符串。

"42".zfill(5)
# '00042'
"-42".zfill(5)
# '-0042' 'dd'.zfill(5)
# '000dd' '--'.zfill(5)
# '-000-' ' '.zfill(5)
# '0000 ' ''.zfill(5)
# '00000' 'dddddddd'.zfill(5)
# 'dddddddd'

str.expandtabs(tabsize=8)

用指定的空格替代横向制表符,使得相邻字符串之间的间距保持在指定的空格数以内。

tab = '1\t23\t456\t7890\t1112131415\t161718192021'

tab.expandtabs()
# '1 23 456 7890 1112131415 161718192021'
# '123456781234567812345678123456781234567812345678' 注意空格的计数与上面输出位置的关系 tab.expandtabs(4)
# '1 23 456 7890 1112131415 161718192021'
# '12341234123412341234123412341234'

str.format(^args, ^^kwargs)

格式化字符串的语法比较繁多,官方文档已经有比较详细的 examples,这里就不写例子了,想了解的童鞋可以直接戳这里 Format examples.

str.format_map(mapping)

类似 str.format(*args, **kwargs) ,不同的是 mapping 是一个字典对象。

People = {'name':'john', 'age':56}

'My name is {name},i am {age} old'.format_map(People)
# 'My name is john,i am 56 old'

字符串搜索定位与替换

str.count(sub[, start[, end]])

text = 'outer protective covering'

text.count('e')
# 4 text.count('e', 5, 11)
# 1 text.count('e', 5, 10)
# 0

str.find(sub[, start[, end]]); str.rfind(sub[, start[, end]])

text = 'outer protective covering'

text.find('er')
# 3 text.find('to')
# -1 text.find('er', 3)
Out[121]: 3 text.find('er', 4)
Out[122]: 20 text.find('er', 4, 21)
Out[123]: -1 text.find('er', 4, 22)
Out[124]: 20 text.rfind('er')
Out[125]: 20 text.rfind('er', 20)
Out[126]: 20 text.rfind('er', 20, 21)
Out[129]: -1

str.index(sub[, start[, end]]); str.rindex(sub[, start[, end]])

与 find() rfind() 类似,不同的是如果找不到,就会引发 ValueError

str.replace(old, new[, count])

'dog wow wow jiao'.replace('wow', 'wang')
# 'dog wang wang jiao' 'dog wow wow jiao'.replace('wow', 'wang', 1)
# 'dog wang wow jiao' 'dog wow wow jiao'.replace('wow', 'wang', 0)
# 'dog wow wow jiao' 'dog wow wow jiao'.replace('wow', 'wang', 2)
# 'dog wang wang jiao' 'dog wow wow jiao'.replace('wow', 'wang', 3)
# 'dog wang wang jiao'

str.lstrip([chars]); str.rstrip([chars]); str.strip([chars])

'  dobi'.lstrip()
# 'dobi'
'db.kun.ac.cn'.lstrip('dbk')
# '.kun.ac.cn' ' dobi '.rstrip()
# ' dobi'
'db.kun.ac.cn'.rstrip('acn')
# 'db.kun.ac.' ' dobi '.strip()
# 'dobi'
'db.kun.ac.cn'.strip('db.c')
# 'kun.ac.cn'
'db.kun.ac.cn'.strip('cbd.un')
# 'kun.a'

static str.maketrans(x[, y[, z]]); str.translate(table)

maktrans 是一个静态方法,用于生成一个对照表,以供 translate 使用。
如果 maktrans 仅一个参数,则该参数必须是一个字典,字典的 key 要么是一个 Unicode 编码(一个整数),要么是一个长度为 1 的字符串,字典的 value 则可以是任意字符串、None或者 Unicode 编码。

a = 'dobi'
ord('o')
# 111 ord('a')
# 97 hex(ord('狗'))
# '0x72d7' b = {'d':'dobi', 111:' is ', 'b':97, 'i':'\u72d7\u72d7'}
table = str.maketrans(b) a.translate(table)
# 'dobi is a狗狗'

如果 maktrans 有两个参数,则两个参数形成映射,且两个字符串必须是长度相等;如果有第三个参数,则第三个参数也必须是字符串,该字符串将自动映射到 None

a = 'dobi is a dog'

table = str.maketrans('dobi', 'alph')

a.translate(table)
# 'alph hs a alg' table = str.maketrans('dobi', 'alph', 'o') a.translate(table)
# 'aph hs a ag'

字符串的联合与分割

str.join(iterable)

用指定的字符串,连接元素为字符串的可迭代对象。

'-'.join(['2012', '3', '12'])
# '2012-3-12' '-'.join([2012, 3, 12])
# TypeError: sequence item 0: expected str instance, int found '-'.join(['2012', '3', b'12']) #bytes 为非字符串
# TypeError: sequence item 2: expected str instance, bytes found '-'.join(['2012'])
# '2012' '-'.join([])
# '' '-'.join([None])
# TypeError: sequence item 0: expected str instance, NoneType found '-'.join([''])
# '' ','.join({'dobi':'dog', 'polly':'bird'})
# 'dobi,polly' ','.join({'dobi':'dog', 'polly':'bird'}.values())
# 'dog,bird'

str.partition(sep); str.rpartition(sep)

'dog wow wow jiao'.partition('wow')
# ('dog ', 'wow', ' wow jiao') 'dog wow wow jiao'.partition('dog')
# ('', 'dog', ' wow wow jiao') 'dog wow wow jiao'.partition('jiao')
# ('dog wow wow ', 'jiao', '') 'dog wow wow jiao'.partition('ww')
# ('dog wow wow jiao', '', '') 'dog wow wow jiao'.rpartition('wow')
Out[131]: ('dog wow ', 'wow', ' jiao') 'dog wow wow jiao'.rpartition('dog')
Out[132]: ('', 'dog', ' wow wow jiao') 'dog wow wow jiao'.rpartition('jiao')
Out[133]: ('dog wow wow ', 'jiao', '') 'dog wow wow jiao'.rpartition('ww')
Out[135]: ('', '', 'dog wow wow jiao')

str.split(sep=None, maxsplit=-1); str.rsplit(sep=None, maxsplit=-1)

'1,2,3'.split(','), '1, 2, 3'.rsplit()
# (['1', '2', '3'], ['1,', '2,', '3']) '1,2,3'.split(',', maxsplit=1), '1,2,3'.rsplit(',', maxsplit=1)
# (['1', '2,3'], ['1,2', '3']) '1 2 3'.split(), '1 2 3'.rsplit()
# (['1', '2', '3'], ['1', '2', '3']) '1 2 3'.split(maxsplit=1), '1 2 3'.rsplit(maxsplit=1)
# (['1', '2 3'], ['1 2', '3']) ' 1 2 3 '.split()
# ['1', '2', '3'] '1,2,,3,'.split(','), '1,2,,3,'.rsplit(',')
# (['1', '2', '', '3', ''], ['1', '2', '', '3', '']) ''.split()
# []
''.split('a')
# ['']
'bcd'.split('a')
# ['bcd']
'bcd'.split(None)
# ['bcd']

str.splitlines([keepends])

字符串以行界符为分隔符拆分为列表;当 keepends 为True,拆分后保留行界符,能被识别的行界符见官方文档

'ab c\n\nde fg\rkl\r\n'.splitlines()
# ['ab c', '', 'de fg', 'kl']
'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True)
# ['ab c\n', '\n', 'de fg\r', 'kl\r\n'] "".splitlines(), ''.split('\n') #注意两者的区别
# ([], [''])
"One line\n".splitlines()
# (['One line'], ['Two lines', ''])

字符串条件判断

str.endswith(suffix[, start[, end]]); str.startswith(prefix[, start[, end]])

text = 'outer protective covering'

text.endswith('ing')
# True text.endswith(('gin', 'ing'))
# True
text.endswith('ter', 2, 5)
# True text.endswith('ter', 2, 4)
# False

str.isalnum()

字符串和数字的任意组合,即为真,简而言之:

只要 c.isalpha()c.isdecimal()c.isdigit()c.isnumeric() 中任意一个为真,则 c.isalnum() 为真。

'dobi'.isalnum()
# True 'dobi123'.isalnum()
# True '123'.isalnum()
# True '徐'.isalnum()
# True 'dobi_123'.isalnum()
# False 'dobi 123'.isalnum()
# False '%'.isalnum()
# False

str.isalpha()

Unicode 字符数据库中作为 “Letter”(这些字符一般具有 “Lm”, “Lt”, “Lu”, “Ll”, or “Lo” 等标识,不同于 Alphabetic) 的,均为真。

'dobi'.isalpha()
# True 'do bi'.isalpha()
# False 'dobi123'.isalpha()
# False '徐'.isalpha()
# True

str.isdecimal(); str.isdigit(); str.isnumeric()

三个方法的区别在于对 Unicode 通用标识的真值判断范围不同:

isdecimal: Nd,
isdigit: No, Nd,
isnumeric: No, Nd, Nl

digit 与 decimal 的区别在于有些数值字符串,是 digit 却非 decimal ,具体戳 这里

num = '\u2155'
print(num)
# ⅕
num.isdecimal(), num.isdigit(), num.isnumeric()
# (False, False, True) num = '\u00B2'
print(num)
# ²
num.isdecimal(), num.isdigit(), num.isnumeric()
# (False, True, True) num = "1" #unicode
num.isdecimal(), num.isdigit(), num.isnumeric()
# (Ture, True, True) num = "'Ⅶ'"
num.isdecimal(), num.isdigit(), num.isnumeric()
# (False, False, True) num = "十"
num.isdecimal(), num.isdigit(), num.isnumeric()
# (False, False, True) num = b"1" # byte
num.isdigit() # True
num.isdecimal() # AttributeError 'bytes' object has no attribute 'isdecimal'
num.isnumeric() # AttributeError 'bytes' object has no attribute 'isnumeric'

str.isidentifier()

判断字符串是否可为合法的标识符。

'def'.isidentifier()
# True 'with'.isidentifier()
# True 'false'.isidentifier()
# True 'dobi_123'.isidentifier()
# True 'dobi 123'.isidentifier()
# False '123'.isidentifier()
# False

str.islower()

'徐'.islower()
# False 'ß'.islower() #德语大写字母
# False 'a徐'.islower()
# True 'ss'.islower()
# True '23'.islower()
# False 'Ab'.islower()
# False

str.isprintable()

判断字符串的所有字符都是可打印字符或字符串为空。Unicode 字符集中 “Other” “Separator” 类别的字符为不可打印的字符(但不包括 ASCII 的空格(0x20))。

'dobi123'.isprintable()
# True 'dobi123\n'.isprintable()
Out[24]: False 'dobi 123'.isprintable()
# True 'dobi.123'.isprintable()
# True ''.isprintable()
# True

str.isspace()

判断字符串中是否至少有一个字符,并且所有字符都是空白字符。

In [29]: '\r\n\t'.isspace()
Out[29]: True In [30]: ''.isspace()
Out[30]: False In [31]: ' '.isspace()
Out[31]: True

str.istitle()

判断字符串中的字符是否是首字母大写,其会忽视非字母字符。

'How Python Works'.istitle()
# True 'How Python WORKS'.istitle()
# False 'how python works'.istitle()
# False 'How Python Works'.istitle()
# True ' '.istitle()
# False ''.istitle()
# False 'A'.istitle()
# True 'a'.istitle()
# False '甩甩Abc Def 123'.istitle()
# True

str.isupper()

'徐'.isupper()
# False 'DOBI'.isupper()
Out[41]: True 'Dobi'.isupper()
# False 'DOBI123'.isupper()
# True 'DOBI 123'.isupper()
# True 'DOBI\t 123'.isupper()
# True 'DOBI_123'.isupper()
# True '_123'.isupper()
# False

字符串编码

str.encode(encoding="utf-8", errors="strict")

 
fname = '徐'

fname.encode('ascii')
# UnicodeEncodeError: 'ascii' codec can't encode character '\u5f90'... fname.encode('ascii', 'replace')
# b'?' fname.encode('ascii', 'ignore')
# b'' fname.encode('ascii', 'xmlcharrefreplace')
# b'徐' fname.encode('ascii', 'backslashreplace')
# b'\\u5f90'

参考资料

Python 内置类型字符串方法

Python 的内置字符串方法(收藏专用)的更多相关文章

  1. Python3内置字符串方法详解

    官网文档地址:https://docs.python.org/3/library/stdtypes.html#string-methods基于 Python 3.X 版本 str.capitalize ...

  2. python数据类型内置的方法

    数据类型的内置方法 在日常生活中不同类型的数据具有不同的功能 eg:表格数据文件具有处理表格的各项功能(透视表 图形化 公式计算) 视频数据文件具有快进 加速等各项功能 ... 1.整型int # 方 ...

  3. Python:内置split()方法

    描述 Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串 语法 split()方法语法: str.split(str="&qu ...

  4. python 字典内置方法get应用

    python字典内置方法get应用,如果我们需要获取字典值的话,我们有两种方法,一个是通过dict['key'],另外一个就是dict.get()方法. 今天给大家分享的就是字典的get()方法. 这 ...

  5. Python的内置方法,abs,all,any,basestring,bin,bool,bytearray,callable,chr,cmp,complex,divmod

    Python的内置方法 abs(X):返回一个数的绝对值,X可以是一个整数,长整型,或者浮点数,如果X是一个复数,此方法返回此复数的绝对值(此复数与它的共轭复数的乘积的平方根) >>> ...

  6. Python字典内置函数和方法

    Python字典内置函数和方法: 注:使用了 items.values.keys 返回的是可迭代对象,可以使用 list 转化为列表. len(字典名): 返回键的个数,即字典的长度 # len(字典 ...

  7. python - 类的内置 attr 方法

    类的内置 attr 方法 #类的内置 attr 方法: # __getattr__ # __setattr__ # __delattr__ # __getattr__ #到调用一个类不存在数参数时,将 ...

  8. python基础-内置函数详解

    一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highlight=built#ascii ...

  9. python_way,day3 集合、函数、三元运算、lambda、python的内置函数、字符转换、文件处理

    python_way,day3 一.集合 二.函数 三.三元运算 四.lambda 五.python的内置函数 六.字符转换 七.文件处理 一.集合: 1.集合的特性: 特性:无序,不重复的序列 如果 ...

随机推荐

  1. Linux系统下Redis单机版的安装详细教程

    Linux系统下Redis单机版的安装详细教程 1.下载软件安装包并上传到root目录 这里以旧版本的3.0进行安装,比较成熟稳定,具体软件可以通过qq群534073451文件下载

  2. pymysql 模块简单使用

    目录 pymysql 模块简单使用 安装 pymysql 模块 使用 pymysql 连接数据库 并插入数据 使用pymysql 插入数据 修改查询显示结果 pymysql 模块简单使用 安装 pym ...

  3. MongoDB初始化创建管理员账户登录

    1.查看mongodb服务是否开启: ps -ef | grep mongod 2.管理员角色必须在启用--auth认证参数之前创建,否则会没有操作权限.如果之前已经创建过用户,请先删除. kill掉 ...

  4. Pycharm安装文档教程

    1 找到安装包 双击 2 3 可以更改安装路径 4 5 6 7 等待安装完成 8 作者:含笑半步颠√ 博客链接:https://www.cnblogs.com/lixy-88428977 声明:本文为 ...

  5. 一步一步手写GIS开源项目-(2)地图平移缩放实现

    系列文章目录 一步一步手写GIS开源项目-(1)500行代码实现基础GIS展示功能 一步一步手写GIS开源项目-(2)地图平移缩放实现 项目github地址:https://github.com/Hu ...

  6. leetcode 数组

    寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相 ...

  7. thinkPHP5.0 使用PHPExcel导出Excel文件

    首先下载PHPExcel类.网上很多,自行下载. 我下载的跟composer下载的不太一样.我下载的是   下载存放目录.jpg 而composer下载的是:   composer下载.jpg 本篇使 ...

  8. IOS 之 NSBundle 使用

    来源:http://blog.sina.com.cn/s/blog_b0c59541010151rd.html An NSBundle object represents a location in ...

  9. c#指定长度切割字符串,返回数组

    public List<string> subStringByCount(string text, int count) { ;//开始索引 ;//结束索引 double count_va ...

  10. C语言的三套标准 C89(C90)、C99、C11

    C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 AT&T 贝尔实验室里开发出来,主要用于重新实现 Unix 操作系统.此时,C语言又被称为 K&R C. ...