python中字符串对象提供了很多方法来操作字符串,功能相当丰富。
>>> dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
这些方法的使用说明见 官方文档:.string methods ,本文对它们进行详细解释,各位以后可将本文当作手册。
这里没有模式匹配(正则)相关的功能。python中要使用模式匹配相关的方法操作字符串,需要 import re 导入re模块。关于正则模式匹配,参见: re Module Contents .。
注意,python中 字符串是不可变对象 ,所以所有修改和生成字符串的操作的实现方法都是另一个内存片段中新生成一个字符串对象。例如, ‘abc’.upper() 将会在划分另一个内存片段,并将返回的 ABC 保存在此内存中。
它是一个有序的字符的集合,用于存储和表示基本的文本信息,’ ‘或" "或’’’ ‘’'中间包含的内容称之为字符串。
>>> str0 = 'hello World'
>>> str0.capitalize()
'Hello world'
>>> "test".center(20, '*')
'********test********'
>>> print('xyabxyxy'.count('xy'))
3
# 次数2,因为从index=1算起,即从'y'开始查找,查找的范围为'yabxyxy'
>>> print('xyabxyxy'.count('xy',1))
2
# 次数1,因为不包括end,所以查找的范围为'yabxyx'
>>> print('xyabxyxy'.count('xy',1,7))
1
# 次数2,因为查找的范围为'yabxyxy'
>>> print('xyabxyxy'.count('xy',1,8))
2
>>> str1 = 'Hello World'
>>> str1.startswith('h')
False
>>> str1.endswith('d')
True
>>> '01\t012\t0123\t01234'.expandtabs(4)
'01 012 0123 01234'
>>> '01\t012\t0123\t01234'.expandtabs(8)
'01 012 0123 01234'
>>> '01\t012\t0123\t01234'.expandtabs(7)
'01 012 0123 01234'
>>> print('012\t0123\n01234'.expandtabs(7))
012 0123
01234
>>> str1 = '123asdxfgs...'
>>> str1.find('123')
0
>>> str1.find('1234')
-1
>>> str2 = 'test88ooo88'
>>> str2.find('88')
4
>>> str2.rfind('88')
9
tip:常与{}一起使用,参数个数由自己决定。
>>> "姓名:{}, 性别:{}".format('张三','男')
'姓名:张三, 性别:男'
>>> "姓名:{a}, 性别:{b}".format(b = '男',a = '张三')
'姓名:张三, 性别:男'
>>> str1 = '123asdxfgs...'
>>> str1.index('x')
6
>>> str1.index('b')
Traceback (most recent call last):
File "" , line 1, in <module>
str1.index('b')
ValueError: substring not found
>>> str1 = '123456789'
>>> str2 = '123asdxfgs...'
>>> str1.isalpha()
False
>>> str1.isdigit()
True
>>> str2.isalnum()
False
>>> str1 = '123456789'
>>> str2 = '123asdxfgs...'
>>> str3 = 'abcdef'
>>> str1.isalpha()
False
>>> str2.isalpha()
False
>>> str3.isalpha()
True
>>> str1 = "1234"
>>> str2 = "123a3b"
>>> str1.isdecimal()
True
>>> str2.isdecimal()
False
>>>
>>> str1 = '123456789'
>>> str2 = '123asdxfgs...'
>>> str3 = 'abcdef'
>>> str1.isdigit()
True
>>> str2.isdigit()
False
>>> str3.isdigit()
False
>>> str1 = 'Hello World'
>>> str2 = '123asdxfgs...'
>>> str1.isupper()
False
>>> str1.islower()
False
>>> str2.islower()
True
>>> str1 = '123456789'
>>> str2 = '123asdxfgs...'
>>> str3 = 'abcdef'
>>> str1.isnumeric()
True
>>> str2.isnumeric()
False
>>> str3.isnumeric()
False
>>> str1 = 'aa aa'
>>> str2 = ' '
>>> str1.isspace()
False
>>> str2.isspace()
True
>>> str1 = 'Hello World'
>>> str2 = 'Hello world'
>>> str1.istitle()
True
>>> str2.istitle()
False
>>> str1 = 'Hello World'
>>> str2 = 'HELLO WORLD'
>>> str1.isupper()
False
>>> str2.isupper()
True
>>> str_break = 'xx'
>>> str_break.join('AB')
'AxxB'
>>> str_break.join('ABC')
'AxxBxxC'
>>> print('xyz'.ljust(5,'_'))
xyz__
>>> print('xyz'.rjust(5,'_'))
__xyz
>>> str1 = 'Hello World'
>>> str1.upper()
'HELLO WORLD'
>>> str1.lower()
'hello world'
>>> str1 = ' content '
>>> str1.lstrip()
'content '
>>> str1.rstrip()
' content'
>>> str1.strip()
'content'
>>> str1.strip('t')
' content '
>>> str2 = '123and123'
>>> str2.strip('123')
'and'
>>> str2.lstrip('123')
'and123'
>>> str1 = 'xxHxexlxxlxo Wxxxxorld'
>>> str1.replace('x', '')
'Hello World'
>>> str1.replace('x', 'A')
'AAHAeAlAAlAo WAAAAorld'
>>> str1.replace('x', 'A', 1)
'AxHxexlxxlxo Wxxxxorld'
>>> str1 = 'test88ooo88'
>>> str1.find('88')
4
>>> str1.rfind('88')
9
>>> print('xyz'.ljust(5,'_'))
xyz__
>>> print('xyz'.rjust(5,'_'))
__xyz
>>> str1 = ' content '
>>> str1.lstrip()
'content '
>>> str1.rstrip()
' content'
>>> str1.strip()
'content'
>>> str1.strip('t')
' content '
>>> str2 = '123and123'
>>> str2.strip('123')
'and'
>>> str2.lstrip('123')
'and123'
>>> str1 = 'AxxBxxC'
>>> str1.split('xx')
['A', 'B', 'C']
>>> str1.split('x')
['A', '', 'B', '', 'C']
>>> str1.split('xxx')
['AxxBxxC']
# sep为单个字符时
>>> '1,2,3'.split(',')
['1', '2', '3']
>>> '1,2,3'.split(',',1)
['1', '2,3'] # 只分割了一次
>>> '1,2,,3'.split(',')
['1', '2', '', '3'] # 不会压缩连续的分隔符
>>> '<>' .split('<')
['', 'hello>', '>', 'world>']
# sep为多个字符时
>>> '<>' .split('<>')
['' , '' ]
# 不指定sep时
>>> '1 2 3'.split()
['1', '2', '3']
>>> '1 2 3'.split(maxsplit=1)
['1', '2 3']
>>> ' 1 2 3 '.split()
['1', '2', '3']
>>> ' 1 2 3 \n'.split()
['1', '2', '3']
# 显式指定sep为空格、制表符、换行符时
>>> ' 1 2 3 \n'.split(' ')
['', '1', '', '2', '', '3', '', '\n']
>>> ' 1 2 3 \n'.split('\t')
[' 1 2 3 \n']
>>> ' 1 2\n3 \n'.split('\n')
[' 1 2', '3 ', ''] # 注意列表的最后一项''
>>> ''.split('\n')
['']
url = “http://ip:port/extername/get_account_trade_record.json?page_size=20&page_index=1&user_id=203317&trade_type=0”
def f(str):
d = {}
t = str.split("?")[1].split("&")
for i in range(len(t)):
d[t[i].split("=")[0]] = t[i].split("=")[1]
return d
print(f(url).get("page_size"))
>>> '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']
#### split()
>>> ''.split('\n')
[''] # 因为没换行符可分割
>>> 'One line\n'.split('\n')
['One line', '']
#### splitlines()
>>> "".splitlines()
[] # 因为没有换行符可分割
>>> 'Two lines\n'.splitlines()
['Two lines']
>>> str1 = 'Hello World'
>>> str1.startswith('h')
False
>>> str1.endswith('d')
True
>>> str1 = ' content '
>>> str1.strip()
'content'
>>> str1.strip('t')
' content '
>>> str2 = '123and123'
>>> str2.strip('123')
'and'
>>> str1 = 'Hello World'
>>> str1.swapcase()
'hELLO wORLD'
>>> print('ab XY'.title())
Ab Xy
S.translate(table)
static str.maketrans(x[, y[, z]])
str.maketrans() 生成一个字符一 一映射的table,然后使用 translate(table) 对字符串S中的每个字符进行映射。
如果你熟悉Linux,就知道tr命令,translate()实现的功能和tr是类似的。
例如,现在想要对"I love fairy"做一个简单的加密,将里面部分字符都替换为数字,这样别人就不知道转换后的这句话是什么意思。
>>> in_str='abcxyz'
>>> out_str='123456'
# maketrans()生成映射表
>>> map_table=str.maketrans(in_str,out_str)
# 使用translate()进行映射
>>> my_love='I love fairy'
>>> result=my_love.translate(map_table)
>>> print(result)
I love f1ir5
注意, maketrans(x[, y[, z]]) 中的x和y都是字符串,且长度必须相等。
如果 maketrans(x[, y[, z]]) 给定了第三个参数z,这个参数字符串中的每个字符都会被映射为None。
例如,不替换"o"和"y"。
>>> in_str='abcxyz'
>>> out_str='123456'
>>> map_table=str.maketrans(in_str,out_str,'ay')
>>> my_love='I love fairy'
>>> result=my_love.translate(map_table)
>>> print(result)
I love fir
>>> str1 = 'Hello World'
>>> str1.upper()
'HELLO WORLD'
>>> str1.lower()
'hello world'
>>> print('abc'.zfill(5))
00abc
>>> print('-abc'.zfill(5))
-0abc
>>> print('+abc'.zfill(5))
+0abc
>>> print('42'.zfill(5))
00042
>>> print('-42'.zfill(5))
-0042
>>> print('+42'.zfill(5))
+0042
参考链接