上篇讲了python字符串的一些常用方法,现在再来看看字符串的一些不常用的方法吧(个人觉得比较鸡肋的方法)。
-
center(width,fillchar):字符串长度变为width的值,并以center为中心,两端以fillchar填充(右端优先),若fillchar小于字符串自身长度,则返回原字符串
-
ljust(width,fillchar):字符串长度变为width的值,并左对齐,右边空缺位置以fillchar填充,若fillchar小于字符串自身r长度,则返回原字符串
-
rjust(width,fillchar):字符串长度变为width的值,并右对齐,左边空缺位置以fillchar填充,若fillchar小于字符串自身长度,则返回原字符串
>>> a="hello world"
>>> a.center(20, '*')
'****hello world*****'
>>> a.center(14, "*")
'*hello world**'
>>> a.rjust(20, '*')
'*********hello world'
>>> a.ljust(20, '*')
'hello world*********'
>>>
- expandtabs(tabsize) :将原字符串中所有'\t'制表符转换成一个或多个空格并返回一个新的字符串,空格的值取决于当前列位置和给定的制表符宽度(tabsize参数值,默认为8)。每 tabsize 个字符设为一个制表位(默认值 8 时设定的制表位在字符串 0, 8, 16 ...依次类推),根据制表位将原字符串分为分为列。如下
>>> a='hello\tworld\nbe\tauti\rful'
>>> a[0:8]
'hello\two' # 第一列
>>> a[8:16]
'rld\nbe\ta' # 第二列
>>> a[16:]
'uti\rful' # 第三列
>>> a.expandtabs()
'hello world\nbe auti\rful'
>>> '01\t012\t01\n\t23\t01234'.expandtabs(4)
'01 012 01\n 23 01234'
然后逐一检查每列中的每个字符,如果字符为'\t',则去除原来的'\t',插入空格,直到该列结束。如果字符为换行符 (\n) 或回车符 (\r),它将会被复制。此列直接结束,继续检查下一列。
结果第一列:索引5时候出现'\t'制表符,则返回的第一列为'hello' + ' '*3,共八个字符。
结果第二列:'world\n'(遇到'\n'该列直接结束)
结果第三列:'be'后面为'\t',则返回的第三列为'be'+' '*6,共八个字符
结果第四列:'auti\r'(遇到'\r'该列直接结束)
结果第五列:'ful'
将以上全部拼在一起即返回的结果,result='hello' + ' '*3+'world\n'+'be'+' '*6+'auti\r'+'ful',该方法真的是有点鸡肋,不过下面还有更鸡肋的。
-
maketrans(x[, y[, z]]): 此静态方法返回一个可供 [
str.translate()
]使用的转换对照表,即一个字典
如果只有一个参数,则它必须是一个将 Unicode 码位序号(整数)或字符(长度为 1 的字符串)映射到 Unicode 码位序号、(任意长度的)字符串或 None 的字典。 字符键将会被转换为码位序号。
如果有两个参数,则它们必须是两个长度相等的字符串,并且在结果字典中,x 中每个字符将被映射到 y 中相同位置的字符。 如果有第三个参数,它必须是一个字符串,其中的字符将在结果中被映射到 None。 - translate(table): 返回原字符串的副本,其中每个字符按给定的转换表进行映射。参数通常为一字典。当映射值为None,将字符从结果字符串中删除
# 只有一个参数时:
>>> a="hello world"
>>> b=a.maketrans({"h":"a","e":"b","l":"c","o":"d","w":"e"})
>>> b
{104: 97, 119: 101, 108: 99, 101: 98, 111: 100}
>>> {chr(k):chr(v) for k,v in b.items()}
{'e': 'b', 'o': 'd', 'l': 'c', 'h': 'a', 'w': 'e'}
# 有两个参数时:
>>> a="hello world"
>>> b=a.maketrans('helow','abcde')
>>> b
{104: 97, 119: 101, 108: 99, 101: 98, 111: 100}
>>> {chr(k):chr(v) for k,v in b.items()}
{'e': 'b', 'o': 'd', 'l': 'c', 'h': 'a', 'w': 'e'}
# 有三个参数时:
>>> a="hello world"
>>> b=a.maketrans('helow','abcde','@#')
>>> b
{64: None, 35: None, 101: 98, 119: 101, 104: 97, 108: 99, 111: 100}
>>> {chr(k):chr(v) for k,v in b.items() if v}
{'e': 'b', 'o': 'd', 'l': 'c', 'h': 'a', 'w': 'e'}
>>> '@hello world#'.translate(b)
'abccd edrcd'
# "@"和"#"被映射成None,从结果字符串中删除,h映射为a,e映射为b,l映射为c,o映射为d,w映射为e,
# r和d由于映射表中未映射,p还是本身值
-
partition(sep): 返p回一个三个元素的元祖,第一个元素为seq字符前面的字符串,第二个元素为seq本身,第三个元素为seq后面的字符串,从最左边的第一个seq切割,seq不在字符串中时返回一个包含字符串本身和两个空字符串的元祖
-
partition(sep): 返回一个三个元素的元祖,第一个元素为seq字符前面的字符串,第二个元素为seq本身,第三个元素为seq后面的字符串,从最右边的第一个seq切割,seq不在字符串中时返回一个包含字符串本身和两个空字符串的元祖
>>> a="hello world"
>>> a.partition('o')
('hell', 'o', ' world')
>>> a.rpartition('o')
('hello w', 'o', 'rld')
>>> a.partition('z')
('hello world', '', '')
- splitlines([keepends]): 返回一个列表,列表元素为被'\n','\t'分割的子字符。keepends默认为False(即返回的列表元素不包含\n,\t),为True时将保留原来的\n或\t。
>>> a="hel\nlo worl\t\rd"
>>> a.splitlines()
['hel', 'lo worl\t', 'd']
>>> a.splitlines(True)
['hel\n', 'lo worl\t\r', 'd']
- swapcase(): 原字符串中小写字母变大写,大写字母变小写,特殊符号和数字不变,返回一个新字符串。
>>> a="hello WORLD @1"
>>> a.swapcase()
'HELLO world @1'
- zfill(width): 原字符串长度变为width,并右对齐,不足位补'0',返回一个新字符串。若width小于原字符串长度,则返回原字符串
>>> a="hello world"
>>> a.zfill(20)
'000000000hello world'
网友评论