字符串
与字符串相关的问题总是很多,⽐如池化 (intern)、编码 (encode) 等。字符串是不可变类型,保
存字符序列或⼆进制数据。
• 短字符串存储在 arena 区域, str、unicode 单字符会被永久缓存。
• str 没有缓存机制,unicode 则保留 1024 个宽字符⻓度⼩于 9 的复⽤对象。
• 内部包含 hash 值,str 另有标记⽤来判断是否被池化。
字符串常量定义简单⾃由,可以是单引号、双引号或三引号。但我个⼈建议⽤双引号表⽰字符串,
⽤单引号表⽰字符,和其他语⾔习惯保持⼀致。
>>> "It's a book."! ! ! ! # 双引号⾥⾯可以⽤单引号。
"It's a book."
>>> 'It\'s a book.'!! ! ! # 转义
"It's a book."
>>> '{"name":"Tom"}'! ! ! # 单引号⾥⾯正常使⽤双引号。
'{"name":"Tom"}'
>>> """! ! ! ! ! # 多⾏
27
... line 1
... line 2
... """
>>> r"abc\x"!! ! ! ! # r 前缀定义⾮转义的 raw-string。
'abc\\x'
>>> "a" "b" "c"! ! ! ! # ⾃动合并多个相邻字符串。
'abc'
>>> "中国⼈"! ! ! ! ! # UTF-8 字符串 (Linux 系统默认)。
'\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba'
>>> type(s), len(s)
<type 'str'>, 9
>>> u"中国⼈"!! ! ! ! # 使⽤ u 前缀定义 UNICODE 字符串。
u'\u4e2d\u56fd\u4eba'
>>> type(u), len(u)
<type 'unicode'>, 3
基本操作:
>>> "a" + "b"
'ab'
>>> "a" * 3
'aaa'
>>> ",".join(["a", "b", "c"])! ! ! ! ! # 合并多个字符串。
'a,b,c'
>>> "a,b,c".split(",")! ! ! ! ! ! # 按指定字符分割。
['a', 'b', 'c']
>>> "a\nb\r\nc".splitlines()! ! ! ! ! # 按⾏分割。
['a', 'b', 'c']
>>> "a\nb\r\nc".splitlines(True)!! ! ! ! # 分割后,保留换⾏符。
['a\n', 'b\r\n', 'c']
>>> "abc".startswith("ab"), "abc".endswith("bc")! ! # 判断是否以特定⼦串开始或结束。
True, True
>>> "abc".upper(), "Abc".lower()!! ! ! ! # ⼤⼩写转换。
'ABC', 'abc'
28
>>> "abcabc".find("bc"), "abcabc".find("bc", 2)! ! # 可指定查找起始结束位置。
1, 4
>>> " abc".lstrip(), "abc ".rstrip(), " abc ".strip() # 剔除前后空格。
'abc', 'abc', 'abc'
>>> "abc".strip("ac")! ! ! ! ! ! # 可删除指定的前后缀字符。
'b'
>>> "abcabc".replace("bc", "BC")!! ! ! ! # 可指定替换次数。
'aBCaBC'
>>> "a\tbc".expandtabs(4)!! ! ! ! ! # 将 tab 替换成空格。
'a bc'
>>> "123".ljust(5, '0'), "456".rjust(5, '0'), "abc".center(10, '*') # 填充
'12300', '00456', '***abc****'
>>> "123".zfill(6), "123456".zfill(4)! ! ! ! ! ! # 数字填充
'000123', '123456'
来源:CSDN
作者:jin-long
链接:https://blog.csdn.net/MEIYOUDAO_JIUSHIDAO/article/details/104737308