python - 官方文档 笔记(5) 文本序列类型 --- str(字符串)

    技术2026-01-14  12

    在Python中处理文本数据是使用str对象,也称为字符串。 字符串是由Unicode码位构成的不可变序列。字符串字面值有多种不同的写法: •单引号:‘允许包含有"双"引号’ •双引号:“允许包含有’单’引号”。 •三重引号:’’‘三重单引号’’’,""“三重双引号”""使用三重引号的字符串可以跨越多行——其中所有的空白字符都将包含在该字符串字面值中。

    'a' In [2]: print('"a"') "a" In [3]: print("""a""") a In [4]: print("""a ...: b ...: c""") a b c

    作为单一表达式组成部分,之间只由空格分隔的多个字符串字面值会被隐式地转换为单个字符串字面值。 也就是说,("spam " “eggs”) == “spam eggs”。

    In [5]: a=("a" "b") In [6]: a Out[6]: 'ab' In [7]: a=("a " "b") In [8]: a Out[8]: 'a b' In [9]: a="a b" In [10]: a Out[10]: 'a b'

    请参阅strings有解有关不同字符串字面值的更多信息,包括所支持的转义序列,以及使用r(”raw”)前缀来禁用大多数转义序列的处理。

    In [16]: print(r"a\nb") a\nb In [17]: print("a\nb") a b

    字符串也可以通过使用str构造器从其他对象创建。

    由于不存在单独的“字符”类型,对字符串做索引操作将产生一个长度为1的字符串。也就是说,对于一个非空字符串s,s[0] == s[0:1]。

    不存在可变的字符串类型,但是str.join()或io.StringIO可以被被用来根据多个片段高效率地构建字符串。

    在3.3版更改:为了与Python 2系列的向下兼容,再次允许字符串字面值使用u前缀。它对字符串字面值的含义没有影响,并且不能与r前缀同时出现。 u是指该字符串是使用unicode编码,而python3默认就使用unicode编码,所以u就没意义了!

    class str(object=”) class str(object=b”,encoding=’utf-8’,errors=’strict’) 返回object的字符串版本。如果未提供object则返回空字符串。在其他情况下str()的行为取决于encoding或errors是否有给出,具体见下。 如果encoding或errors均未给出,str(object)返回object.__str__(),这是object的“非正式”或格式良好的字符串表示。对于字符串对象,这是该字符串本身。如果object没有__str__()方法,则str()将回退为返回repr(object)。 如果encoding或errors至少给出其中之一,则object应该是一个bytes-like object(例如bytes或bytearray)。在此情况下,如果object是一个bytes(或bytearray)对象,则str(bytes,encoding, errors)等价于bytes.decode(encoding, errors)。否则的话,会在调用bytes.decode()之前获取缓冲区对象下层的bytes对象。请参阅二进制序列类型— bytes,bytearray, memoryview与bufferobjects了解有关缓冲区对象的信息。 将一个bytes对象传入str()而不给出encoding或errors参数的操作属于第一种情况,将返回非正式的字符串表示(另请参阅Python的-b命令行选项)。例如:

    >>>str(b'Zoot!') "b'Zoot!'"

    有关str类及其方法的更多信息,请参阅下面的文本序列类型— str和字符串的方法小节。要输出格式化字符串,请参阅f-strings和格式字符串语法小节。此外还可以参阅文本处理服务小节。

    注:因为编码的原因,以上情况很难列举出来,例如即便在unicode环境下,定义一个gbk的字符串,但系统是知道他的意思的,所以当使用他时,仍能够正确的显示。而b’’,他之能带ascii字符。

    字符串的方法

    字符串实现了所有一般序列的操作,还额外提供了以下列出的一些附加方法。字符串还支持两种字符串格式化样式,一种提供了很大程度的灵活性和可定制性(参阅str.format(),格式字符串语法和自定义字符串格式化)而另一种是基于Cprintf样式的格式化,它可处理的类型范围较窄,并且更难以正确使用,但对于它可处理的情况往往会更为快速(printf风格的字符串格式化)。标准库的文本处理服务部分涵盖了许多其他模块,提供各种文本相关工具(例如包含于re模块中的正则表达式支持)。

    In [5]: "{0} {0} {1}".format(1,2) Out[5]: '1 1 2' In [6]: "%d"%1 Out[6]: '1' In [10]: "%d %s"%(1,"wa") Out[10]: '1 wa' In [15]: "%(国)s %(君)s"%{"国":"魏","君":"曹"} Out[15]: '魏 曹'

    str.capitalize() 返回原字符串的副本,其首个字符大写,其余为小写。在3.8版更改:第一个字符现在被放入了titlecase而不是uppercase。这意味着复合字母类字符将只有首个字母改为大写,而再不是全部字符大写。 ·none 不改变文本的大写小写。 ·capitalize、titlecase 元素中毎个单词的第一个字母用大写。 ·uppercase 将所有文本设置为大写。 capitalize:使资本化;以大写字母写;

    InIn [16]: "wang".capitalize() Out[16]: 'Wang'

    str.casefold() 返回原字符串消除大小写的副本。消除大小写的字符串可用于忽略大小写的匹配。消除大小写类似于转为小写,但是更加彻底一些,因为它会移除字符串中的所有大小写变化形式。例如,德语小写字母’ß’相当于"ss"。由于它已经是小写了,lower()不会对’ß’做任何改变;而casefold()则会将其转换为"ss"。消除大小写算法的描述请参见Unicode标准的3.13节。3.3新版功能 case:情况 fold:折叠、合拢 casefold:返回所有字符为小写 收束 回归最原始唯一的状态

    In [19]: "Wangß".casefold() Out[19]: 'wangss'

    str.center(width[,fillchar]) 返回长度为width的字符串,原字符串在其正中。使用指定的fillchar填充两边的空位(默认使用ASCII空格符)。如果width小于等于len(s)则返回原字符串的副本。

    In [21]: "魏国".center(8) Out[21]: ' 魏国 ' InIn [23]: "魏国".center(8,"⑦") Out[23]: '⑦⑦⑦魏国⑦⑦⑦' In In [27]: "魏国".center(1,"⑦") Out[27]: '魏国'

    str.count(sub[,start[,end]]) 反回子字符串sub在[start,end]范围内非重叠出现的次数。可选参数start与end会被解读为切片表示法。

    In [28]: "daskjkldsjklfaf20312asd0fds123af".count("s") Out[28]: 4

    str.encode(encoding=”utf-8”,errors=”strict”) 返回原字符串编码为字节串对象的版本。默认编码为’utf-8’。可以给出errors来设置不同的错误处理方案。errors的默认值为’strict’,表示编码错误会引发UnicodeError。其他可用的值为’ignore’,‘replace’,‘xmlcharrefreplace’,'backslashreplace’以及任何其他通过codecs.register_error()注册的值,请参阅错误处理方案小节。要查看可用的编码列表,请参阅标准编码小节。 在3.1版更改:加入了对关键字参数的支持。

    print("香".encode()) print("香".encode(encoding="unicode_escape")) input() b'\xe9\xa6\x99' b'\\u9999' File "C:/Users/jhsxy2005/PycharmProjects/untitled/20200705encode1.py", line 1 SyntaxError: Non-UTF-8 code starting with '\xfe' in file C:/Users/jhsxy2005/PycharmProjects/untitled/20200705encode1.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

    同样的代码,在两个文件中两个效果!

    原因是我用的pycharm在某个注释coding过程中,他以unicode进行了保存,而且之后再怎么改,也不会改变保存文件的编码!只能利用记事本等工具!

    而以FEFF的Unicode编码、FFFE开头的Unicode big endian,python是识别不出的。而以EFBBBF开头的GBK编码却可以识别。

    结论,pycharm会将文件依照注释的coding进行保存,UTF-8、GBK可以正常运行。而Unicode,pycharm确实将.py以Unicode保存了,但是python却无法读取Unicode的文件。

    而我尝试用atom这样写,atom都是默认用UTF-8进行保存的。这样会看到另一种报错!

    SyntaxError: encoding problem: Unicode SyntaxError: encoding problem: GBK with BOM

    而以UTF-8编码保存的文件都是干货,没有任何前缀。

    str.endswith(suffix[,start[,end]]) 如果字符串以指定的suffix结束返回True,否则返回False。suffix也可以为由多个供查找的后缀构成的元组。如果有可选项start,将从所指定位置开始检查。如果有可选项end,将在所指定位置停止比较。

    In [3]: "12v31231cvx".endswith("vx") Out[3]: True In [4]: "12v31231cvx".endswith("31",2,5) Out[4]: True In [6]: "12v31231cvx".endswith("31",4,5) Out[6]: False

    endswith:ends with end swith 以某些字符结束

    str.expandtabs(tabsize=8) 返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制表符宽度。每tabsize个字符设为一个制表位(默认值8时设定的制表位在列0, 8, 16依次类推)。要展开字符串,当前列将被设为零并逐一检查字符串中的每个字符。如果字符为制表符(\t),则会在结果中插入一个或多个空格符,直到当前列等于下一个制表位。(制表符本身不会被复制。)如果字符为换行符(\n)或回车符(\r),它会被复制并将当前列重设为零。任何其他字符会被不加修改地复制并将当前列加一,不论该字符在被打印时会如何显示。

    In [7]: '01\t012\t0123\t01234'.expandtabs() Out[7]: '01 012 0123 01234' In [8]: '01\t012\t0123\t01234'.expandtabs(4) Out[8]: '01 012 0123 01234' In [10]: '01\t012\t01\n23\t01234'.expandtabs(4) Out[10]: '01 012 01\n23 01234' In [11]: print('01\t012\t01\n23\t01234'.expandtabs(4)) 01 012 01 23 01234

    解码的仅仅是把\t转变为对应数量的空格。\n并没解码,但是\n重置了位置,于是\n之后的位置相当于下一行的索引[0],再继续累加判断\t该在相对于索引[0]之后的那个位置出现

    str.find(sub[,start[,end]]) 返回子字符串sub在s[start:end]切片内被找到的最小索引。可选参数start与end会被解读为切片表示法。如果sub未被找到则返回-1

    In [1]: "123456789a".find("a",6,-1) Out[1]: -1 In [2]: "123456789a".find("a",6,) Out[2]: 9 In [3]: "123456789a".find("a",6) Out[3]: 9 In [4]: "123456789a".find("a") Out[4]: 9

    find()方法应该只在你需要知道sub所在位置时使用。要检查sub是否为子字符串,请使用in操作符:

    >>>'Py'in'Python' True

    str.format(*args,**kwargs) 执行字符串格式化操作。调用此方法的字符串可以包含字符串字面值或者以花括号{}括起来的替换域。每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。

    In [1]: %%timeit ...: "The sum of 1 + 2 is{0}".format(1+2) ...: ...: 302 ns ± 3.95 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) In [3]: %%timeit ...: "The sum of 1 + 2 is %i"%(1+2) ...: ...: 206 ns ± 2.74 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

    之前的printf格式中介绍过了%的用法,提到%比format效率高

    当使用n类型(例如:’{:n}’.format(1234))来格式化数字(int,float,complex,decimal.Decimal及其子类)的时候,该函数会临时性地将LC_CTYPE区域设置为LC_NUMERIC区域以解码localeconv()的decimal_point和thousands_sep字段,如果它们是非ASCII字符或长度超过1字节的话,并且LC_NUMERIC区域会与LC_CTYPE区域不一致。这个临时更改会影响其他线程。

    'n’数字。这与’d’相似,不同之处在于它会使用当前区域设置来插入适当的数字分隔字符

    In [1]: '{:n}'.format(1234) Out[1]: '1234' In [2]: '{:n}'.format(1234.5) Out[2]: '1234.5' In [3]: '{:n}'.format(1234.5+6j) Out[3]: '1234.5+6j' In [4]: '{:n}'.format(1234.5789101112131415161718192) Out[4]: '1234.58' In [5]: '{:n}'.format(1234.5789) Out[5]: '1234.58' In [6]: '{:.20n}'.format(1234.5789101112131415161718192) Out[6]: '1234.5789101112131902' In [7]: '{:.30n}'.format(1234.5789101112131415161718192) Out[7]: '1234.57891011121319024823606014' In [8]: '{:.40n}'.format(1234.5789101112131415161718192) Out[8]: '1234.578910111213190248236060142517089844' In [9]: '{:.50n}'.format(1234.5789101112131415161718192) Out[9]: '1234.57891011121319024823606014251708984375' In [10]: '{:.50f}'.format(1234.5789101112131415161718192) Out[10]: '1234.57891011121319024823606014251708984375000000000000' In [11]: '{:.40f}'.format(1234.5789101112131415161718192) Out[11]: '1234.5789101112131902482360601425170898437500' In [12]: '{:.30f}'.format(1234.5789101112131415161718192) Out[12]: '1234.578910111213190248236060142517' In [13]: '{:.20f}'.format(1234.5789101112131415161718192) Out[13]: '1234.57891011121319024824' In [14]: '{:.10f}'.format(1234.5789101112131415161718192) Out[14]: '1234.5789101112' In [15]: '{:f}'.format(1234.5789101112131415161718192) Out[15]: '1234.578910'

    以上原因未知

    In: l=[0,1,2] In: "{0}{1}{2}".format(l[0],l[1],l[2]) Out: '012' In [48]: "{0[0]}{0[1]}{0[2]}".format(l) Out[48]: '012' In [34]: print ("Test: argument1={arg1} and argument2={arg2}".format_map({'arg1':"Hello",'arg2':123})) Test: argument1=Hello and argument2=123 In [35]: d={'arg1':"Hello",'arg2':123} In [36]: print ("Test: argument1={arg1} and argument2={arg2}".format_map(d)) Test: argument1=Hello and argument2=123 小樱={"名字":"木之本樱","生日":"4月1日","血型":"A型"} 知世=dict(zip(["名字","生日","血型"],["大道寺知世","9月3日","A型"])) 小狼=dict(zip(("名字","生日","血型"),["李小狼","7月13日","O型"])) 小可=dict([("名字","可鲁贝洛斯"),("生日","-"),("血型","-")]) 父亲=dict(名字="木之本藤隆",生日="1月3日",血型="-") 魔卡少女樱=[小樱,知世,小狼,小可,父亲] for i in 魔卡少女樱: print("角色:{名字}\t".format_map(i).expandtabs(10),end="\t") print("生日:{0[生日]}\t".format(i).expandtabs(10),end="\t") print("血型:{[血型]}".format(i)) 结果: 角色:木之本樱 生日:41日 血型:A型 角色:大道寺知世 生日:93日 血型:A型 角色:李小狼 生日:713日 血型:O型 角色:可鲁贝洛斯 生日:- 血型:- 角色:木之本藤隆 生日:13日 血型:- In [74]: %%timeit ...: "{one}".format_map(a) ...: ...: 334 ns ± 9.29 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) In [75]: %%timeit ...: "{[one]}".format(a) ...: ...: 373 ns ± 2.79 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

    format_map的用法优势是内存,但速度也是有稍许优势的

    但我尝试设置了个大的字典:

    a=dict(zip(range(100000),range(1,100001)))

    但是他无法用"{1000}".format_map(a)调用。大概是因为key是不带引号的数值,例如上面是’0’:0,但是这个是0:0。无法利用{1000}获取[1000],他获取的是[‘1000’]。而既便如此,不掉用也能key和value也能让format生效吧!但是看结果,不明显。都是大约15MB

    str.index(sub[,start[,end]]) 类似于find(),但在找不到子类时会引发ValueError。

    str.isalnum() 判断是否只包含字母和数字,至少一个字符 str.isalpha() 是否只包含字母,至少一个字符 str.isascii() 是否是ascii编码范围U+0000-U+007F

    list1=[] 标记=0 for i in range(1114112): s=chr(i) if s.isascii(): if 标记==1: list1.append(s) else:list1.extend(["U+"+hex(i)[2:].rjust(4,"0"),s]) 标记=1 else:标记=0 f=open("d:\\ascii.txt","w+",encoding="UTF-8") print(" ".join(list1),file=f)

    因为这些字符相当的多,所以用shell打印只能显示最后一页,而用jupyter执行"".join操作,会卡死。所以在jupyter上执行文件写入操作,几乎秒完。于是jupyter的print计时,其实是从python传递print内容给jupyter完结的,所以相当于python之读取和传递,不输出的速度,而"".join时,jupyter试图完全打印出来,造成卡死。这个文件有近乎600k,用记事本打开都要等一些时间。 而alnum在我看来,几乎涵盖了所有的字符。而不是单单的0~9和aA~zZ。

    于是就之修一修assic吧!

    U+0000 ! " # $ % & ’ ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ 

    In [14]: for i in range(128): ...: print(chr(i),end="") ...: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

    !:U+0021 叹号 ~:U+007E 颚化号 波浪号 :U+007E 删除 str.isdecimal()

    listdecimal=[] 标记=0 for i in range(1114112): s=chr(i) if s.isdecimal(): if 标记==1: listdecimal.append(s) else:listdecimal.extend(["U+"+hex(i)[2:].rjust(4,"0"),s]) 标记=1 else:标记=0 " ".join(listdecimal)

    U+0030 0 1 2 3 4 5 6 7 8 9 U+0660 ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ U+06f0 ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ U+07c0 ߀ ߁ ߂ ߃ ߄ ߅ ߆ ߇ ߈ ߉ U+0966 ० १ २ ३ ४ ५ ६ ७ ८ ९ U+09e6 ০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ U+0a66 ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ U+0ae6 ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯ U+0b66 ୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯ U+0be6 ௦ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ U+0c66 ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯ U+0ce6 ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯ U+0d66 ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯ U+0de6 ෦ ෧ ෨ ෩ ෪ ෫ ෬ ෭ ෮ ෯ U+0e50 ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ U+0ed0 ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙ U+0f20 ༠ ༡ ༢ ༣ ༤ ༥ ༦ ༧ ༨ ༩ U+1040 ၀ ၁ ၂ ၃ ၄ ၅ ၆ ၇ ၈ ၉ U+1090 ႐ ႑ ႒ ႓ ႔ ႕ ႖ ႗ ႘ ႙ U+17e0 ០ ១ ២ ៣ ៤ ៥ ៦ ៧ ៨ ៩ U+1810 ᠐ ᠑ ᠒ ᠓ ᠔ ᠕ ᠖ ᠗ ᠘ ᠙ U+1946 ᥆ ᥇ ᥈ ᥉ ᥊ ᥋ ᥌ ᥍ ᥎ ᥏ U+19d0 ᧐ ᧑ ᧒ ᧓ ᧔ ᧕ ᧖ ᧗ ᧘ ᧙ U+1a80 ᪀ ᪁ ᪂ ᪃ ᪄ ᪅ ᪆ ᪇ ᪈ ᪉ U+1a90 ᪐ ᪑ ᪒ ᪓ ᪔ ᪕ ᪖ ᪗ ᪘ ᪙ U+1b50 ᭐ ᭑ ᭒ ᭓ ᭔ ᭕ ᭖ ᭗ ᭘ ᭙ U+1bb0 ᮰ ᮱ ᮲ ᮳ ᮴ ᮵ ᮶ ᮷ ᮸ ᮹ U+1c40 ᱀ ᱁ ᱂ ᱃ ᱄ ᱅ ᱆ ᱇ ᱈ ᱉ U+1c50 ᱐ ᱑ ᱒ ᱓ ᱔ ᱕ ᱖ ᱗ ᱘ ᱙ U+a620 ꘠ ꘡ ꘢ ꘣ ꘤ ꘥ ꘦ ꘧ ꘨ ꘩ U+a8d0 ꣐ ꣑ ꣒ ꣓ ꣔ ꣕ ꣖ ꣗ ꣘ ꣙ U+a900 ꤀ ꤁ ꤂ ꤃ ꤄ ꤅ ꤆ ꤇ ꤈ ꤉ U+a9d0 ꧐ ꧑ ꧒ ꧓ ꧔ ꧕ ꧖ ꧗ ꧘ ꧙ U+a9f0 ꧰ ꧱ ꧲ ꧳ ꧴ ꧵ ꧶ ꧷ ꧸ ꧹ U+aa50 ꩐ ꩑ ꩒ ꩓ ꩔ ꩕ ꩖ ꩗ ꩘ ꩙ U+abf0 ꯰ ꯱ ꯲ ꯳ ꯴ ꯵ ꯶ ꯷ ꯸ ꯹ U+ff10 0 1 2 3 4 5 6 7 8 9 U+104a0 𐒠 𐒡 𐒢 𐒣 𐒤 𐒥 𐒦 𐒧 𐒨 𐒩 U+10d30 𐴰 𐴱 𐴲 𐴳 𐴴 𐴵 𐴶 𐴷 𐴸 𐴹 U+11066 𑁦 𑁧 𑁨 𑁩 𑁪 𑁫 𑁬 𑁭 𑁮 𑁯 U+110f0 𑃰 𑃱 𑃲 𑃳 𑃴 𑃵 𑃶 𑃷 𑃸 𑃹 U+11136 𑄶 𑄷 𑄸 𑄹 𑄺 𑄻 𑄼 𑄽 𑄾 𑄿 U+111d0 𑇐 𑇑 𑇒 𑇓 𑇔 𑇕 𑇖 𑇗 𑇘 𑇙 U+112f0 𑋰 𑋱 𑋲 𑋳 𑋴 𑋵 𑋶 𑋷 𑋸 𑋹 U+11450 𑑐 𑑑 𑑒 𑑓 𑑔 𑑕 𑑖 𑑗 𑑘 𑑙 U+114d0 𑓐 𑓑 𑓒 𑓓 𑓔 𑓕 𑓖 𑓗 𑓘 𑓙 U+11650 𑙐 𑙑 𑙒 𑙓 𑙔 𑙕 𑙖 𑙗 𑙘 𑙙 U+116c0 𑛀 𑛁 𑛂 𑛃 𑛄 𑛅 𑛆 𑛇 𑛈 𑛉 U+11730 𑜰 𑜱 𑜲 𑜳 𑜴 𑜵 𑜶 𑜷 𑜸 𑜹 U+118e0 𑣠 𑣡 𑣢 𑣣 𑣤 𑣥 𑣦 𑣧 𑣨 𑣩 U+11c50 𑱐 𑱑 𑱒 𑱓 𑱔 𑱕 𑱖 𑱗 𑱘 𑱙 U+11d50 𑵐 𑵑 𑵒 𑵓 𑵔 𑵕 𑵖 𑵗 𑵘 𑵙 U+11da0 𑶠 𑶡 𑶢 𑶣 𑶤 𑶥 𑶦 𑶧 𑶨 𑶩 U+16a60 𖩠 𖩡 𖩢 𖩣 𖩤 𖩥 𖩦 𖩧 𖩨 𖩩 U+16b50 𖭐 𖭑 𖭒 𖭓 𖭔 𖭕 𖭖 𖭗 𖭘 𖭙 U+1d7ce 𝟎 𝟏 𝟐 𝟑 𝟒 𝟓 𝟔 𝟕 𝟖 𝟗 𝟘 𝟙 𝟚 𝟛 𝟜 𝟝 𝟞 𝟟 𝟠 𝟡 𝟢 𝟣 𝟤 𝟥 𝟦 𝟧 𝟨 𝟩 𝟪 𝟫 𝟬 𝟭 𝟮 𝟯 𝟰 𝟱 𝟲 𝟳 𝟴 𝟵 𝟶 𝟷 𝟸 𝟹 𝟺 𝟻 𝟼 𝟽 𝟾 𝟿 U+1e140 𞅀 𞅁 𞅂 𞅃 𞅄 𞅅 𞅆 𞅇 𞅈 𞅉 U+1e2f0 𞋰 𞋱 𞋲 𞋳 𞋴 𞋵 𞋶 𞋷 𞋸 𞋹 U+1e950 𞥐 𞥑 𞥒 𞥓 𞥔 𞥕 𞥖 𞥗 𞥘 𞥙

    三者关系: decimal:各国十进制数字 digit:以上+序号 numeric:以上+超序号+符号数字+罗马数字+中文数字+其他文化的数字

    listd1=listdecimal.copy() listd2=listdigit.copy() listd1d2=[] [(listd1d2.append(i),listd1.remove(i),listd2.remove(i)) for i in listdecimal if i in listdigit]

    digit 包含 decimal 余下

    U+00b2 ² ³ U+00b9 ¹ U+1369 ፩ ፪ ፫ ፬ ፭ ፮ ፯ ፰ ፱ ᧚ U+2070 ⁰ U+2074 ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ U+2080 ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ U+2460 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ U+2474 ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ U+2488 ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ U+24ea ⓪ U+24f5 ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ U+24ff ⓿ U+2776 ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ U+2780 ➀ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ➈ U+278a ➊ ➋ ➌ ➍ ➎ ➏ ➐ ➑ ➒ U+10a40 𐩀 𐩁 𐩂 𐩃 U+10e60 𐹠 𐹡 𐹢 𐹣 𐹤 𐹥 𐹦 𐹧 𐹨 U+11052 𑁒 𑁓 𑁔 𑁕 𑁖 𑁗 𑁘 𑁙 𑁚 U+1f100 🄀 🄁 🄂 🄃 🄄 🄅 🄆 🄇 🄈 🄉 🄊

    numeric 包含 digit 余下

    U+00bc ¼ ½ ¾ U+09f4 ৴ ৵ ৶ ৷ ৸ ৹ U+0b72 ୲ ୳ ୴ ୵ ୶ ୷ ௰ ௱ ௲ U+0c78 ౸ ౹ ౺ ౻ ౼ ౽ ౾ U+0d58 ൘ ൙ ൚ ൛ ൜ ൝ ൞ ൰ ൱ ൲ ൳ ൴ ൵ ൶ ൷ ൸ ༪ ༫ ༬ ༭ ༮ ༯ ༰ ༱ ༲ ༳ ፲ ፳ ፴ ፵ ፶ ፷ ፸ ፹ ፺ ፻ ፼ U+16ee ᛮ ᛯ ᛰ U+17f0 ៰ ៱ ៲ ៳ ៴ ៵ ៶ ៷ ៸ ៹ U+2150 ⅐ ⅑ ⅒ ⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞ ⅟ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ Ⅼ Ⅽ Ⅾ Ⅿ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ ⅼ ⅽ ⅾ ⅿ ↀ ↁ ↂ U+2185 ↅ ↆ ↇ ↈ ↉ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓾ ❿ ➉ ➓ U+2cfd ⳽ U+3007 〇 U+3021 〡 〢 〣 〤 〥 〦 〧 〨 〩 U+3038 〸 〹 〺 U+3192 ㆒ ㆓ ㆔ ㆕ U+3220 ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ U+3248 ㉈ ㉉ ㉊ ㉋ ㉌ ㉍ ㉎ ㉏ U+3251 ㉑ ㉒ ㉓ ㉔ ㉕ ㉖ ㉗ ㉘ ㉙ ㉚ ㉛ ㉜ ㉝ ㉞ ㉟ U+3280 ㊀ ㊁ ㊂ ㊃ ㊄ ㊅ ㊆ ㊇ ㊈ ㊉ U+32b1 ㊱ ㊲ ㊳ ㊴ ㊵ ㊶ ㊷ ㊸ ㊹ ㊺ ㊻ ㊼ ㊽ ㊾ ㊿ U+3405 㐅 U+3483 㒃 U+382a 㠪 U+3b4d 㭍 U+4e00 一 U+4e03 七 U+4e07 万 U+4e09 三 U+4e5d 九 U+4e8c 二 U+4e94 五 U+4e96 亖 U+4ebf 亿 什 U+4edf 仟 U+4ee8 仨 U+4f0d 伍 U+4f70 佰 U+5104 億 U+5146 兆 U+5169 兩 U+516b 八 U+516d 六 U+5341 十 U+5343 千 卄 卅 U+534c 卌 U+53c1 叁 参 參 叄 U+56db 四 U+58f1 壱 U+58f9 壹 U+5e7a 幺 U+5efe 廾 廿 U+5f0c 弌 弍 弎 U+5f10 弐 U+62fe 拾 U+634c 捌 U+67d2 柒 U+6f06 漆 U+7396 玖 U+767e 百 U+8086 肆 U+842c 萬 U+8cae 貮 U+8cb3 貳 U+8d30 贰 U+9621 阡 U+9646 陆 U+964c 陌 U+9678 陸 U+96f6 零 U+a6e6 ꛦ ꛧ ꛨ ꛩ ꛪ ꛫ ꛬ ꛭ ꛮ ꛯ U+a830 ꠰ ꠱ ꠲ ꠳ ꠴ ꠵ U+f96b 參 U+f973 拾 U+f978 兩 U+f9b2 零 U+f9d1 六 U+f9d3 陸 U+f9fd 什 U+10107 𐄇 𐄈 𐄉 𐄊 𐄋 𐄌 𐄍 𐄎 𐄏 𐄐 𐄑 𐄒 𐄓 𐄔 𐄕 𐄖 𐄗 𐄘 𐄙 𐄚 𐄛 𐄜 𐄝 𐄞 𐄟 𐄠 𐄡 𐄢 𐄣 𐄤 𐄥 𐄦 𐄧 𐄨 𐄩 𐄪 𐄫 𐄬 𐄭 𐄮 𐄯 𐄰 𐄱 𐄲 𐄳 U+10140 𐅀 𐅁 𐅂 𐅃 𐅄 𐅅 𐅆 𐅇 𐅈 𐅉 𐅊 𐅋 𐅌 𐅍 𐅎 𐅏 𐅐 𐅑 𐅒 𐅓 𐅔 𐅕 𐅖 𐅗 𐅘 𐅙 𐅚 𐅛 𐅜 𐅝 𐅞 𐅟 𐅠 𐅡 𐅢 𐅣 𐅤 𐅥 𐅦 𐅧 𐅨 𐅩 𐅪 𐅫 𐅬 𐅭 𐅮 𐅯 𐅰 𐅱 𐅲 𐅳 𐅴 𐅵 𐅶 𐅷 𐅸 U+1018a 𐆊 𐆋 U+102e1 𐋡 𐋢 𐋣 𐋤 𐋥 𐋦 𐋧 𐋨 𐋩 𐋪 𐋫 𐋬 𐋭 𐋮 𐋯 𐋰 𐋱 𐋲 𐋳 𐋴 𐋵 𐋶 𐋷 𐋸 𐋹 𐋺 𐋻 U+10320 𐌠 𐌡 𐌢 𐌣 U+10341 𐍁 U+1034a 𐍊 U+103d1 𐏑 𐏒 𐏓 𐏔 𐏕 U+10858 𐡘 𐡙 𐡚 𐡛 𐡜 𐡝 𐡞 𐡟 U+10879 𐡹 𐡺 𐡻 𐡼 𐡽 𐡾 𐡿 U+108a7 𐢧 𐢨 𐢩 𐢪 𐢫 𐢬 𐢭shan 𐢮 𐢯 U+108fb 𐣻 𐣼 𐣽 𐣾 𐣿 U+10916 𐤖 𐤗 𐤘 𐤙 𐤚 𐤛 U+109bc 𐦼 𐦽 U+109c0 𐧀 𐧁 𐧂 𐧃 𐧄 𐧅 𐧆 𐧇 𐧈 𐧉 𐧊 𐧋 𐧌 𐧍 𐧎 𐧏 U+109d2 𐧒 𐧓 𐧔 𐧕 𐧖 𐧗 𐧘 𐧙 𐧚 𐧛 𐧜 𐧝 𐧞 𐧟 𐧠 𐧡 𐧢 𐧣 𐧤 𐧥 𐧦 𐧧 𐧨 𐧩 𐧪 𐧫 𐧬 𐧭 𐧮 𐧯 𐧰 𐧱 𐧲 𐧳 𐧴 𐧵 𐧶 𐧷 𐧸 𐧹 𐧺 𐧻 𐧼 𐧽 𐧾 𐧿 𐩄 𐩅 𐩆 𐩇 𐩈 U+10a7d 𐩽 𐩾 U+10a9d 𐪝 𐪞 𐪟 U+10aeb 𐫫 𐫬 𐫭 𐫮 𐫯 U+10b58 𐭘 𐭙 𐭚 𐭛 𐭜 𐭝 𐭞 𐭟 U+10b78 𐭸 𐭹 𐭺 𐭻 𐭼 𐭽 𐭾 𐭿 U+10ba9 𐮩 𐮪 𐮫 𐮬 𐮭 𐮮 𐮯 U+10cfa 𐳺 𐳻 𐳼 𐳽 𐳾 𐳿 𐹩 𐹪 𐹫 𐹬 𐹭 𐹮 𐹯 𐹰 𐹱 𐹲 𐹳 𐹴 sha𐹵 𐹶 𐹷 𐹸 𐹹 𐹺 𐹻 𐹼 𐹽 𐹾 U+10f1d 𐼝 𐼞 𐼟 𐼠 𐼡 𐼢 𐼣 𐼤 𐼥 𐼦 U+10f51 𐽑 𐽒 𐽓 𐽔 𑁛 𑁜 𑁝 𑁞 𑁟 𑁠 𑁡 𑁢 𑁣 𑁤 𑁥 U+111e1 𑇡 𑇢 𑇣 𑇤 𑇥 𑇦 𑇧 𑇨 𑇩 𑇪 𑇫 𑇬 𑇭 𑇮 𑇯 𑇰 𑇱 𑇲 𑇳 𑇴 𑜺 𑜻 𑣪 𑣫 𑣬 𑣭 𑣮 𑣯 𑣰 𑣱 𑣲 𑱚 𑱛 𑱜 𑱝 𑱞 𑱟 𑱠 𑱡 𑱢 𑱣 𑱤 𑱥 𑱦 𑱧 𑱨 𑱩 𑱪 𑱫 𑱬 U+11fc0 𑿀 𑿁 𑿂 𑿃 𑿄 𑿅 𑿆 𑿇 𑿈 𑿉 𑿊 𑿋 𑿌 𑿍 𑿎 𑿏 𑿐 𑿑 𑿒 𑿓 𑿔 U+12400 𒐀 𒐁 𒐂 𒐃 𒐄 𒐅 𒐆 𒐇 𒐈 𒐉 𒐊 𒐋 𒐌 𒐍 𒐎 𒐏 𒐐 𒐑 𒐒 𒐓 𒐔 𒐕 𒐖 𒐗 𒐘 𒐙 𒐚 𒐛 𒐜 𒐝 𒐞 𒐟 𒐠 𒐡 𒐢 𒐣 𒐤 𒐥 𒐦 𒐧 𒐨 𒐩 𒐪 𒐫 𒐬 𒐭 𒐮sh 𒐯 𒐰 𒐱 𒐲 𒐳 𒐴 𒐵 𒐶 𒐷 𒐸 𒐹 𒐺 𒐻 𒐼 𒐽 𒐾 𒐿 𒑀 𒑁 𒑂 𒑃 𒑄 𒑅 𒑆 𒑇 𒑈 𒑉 𒑊 𒑋 𒑌 𒑍 𒑎 𒑏 𒑐 𒑑 𒑒 𒑓 𒑔 𒑕 𒑖 𒑗 𒑘 𒑙 𒑚 𒑛 𒑜 𒑝 𒑞 𒑟 𒑠 𒑡 𒑢 𒑣 𒑤 𒑥 𒑦 𒑧 𒑨 𒑩 𒑪 𒑫 𒑬 𒑭 𒑮 U+16b5b 𖭛 𖭜 𖭝 𖭞 𖭟 𖭠 𖭡 U+16e80 𖺀 𖺁 𖺂 𖺃 𖺄 𖺅 𖺆 𖺇 𖺈 𖺉 𖺊 𖺋 𖺌 𖺍 𖺎 𖺏 𖺐 𖺑 𖺒 𖺓 𖺔 𖺕 𖺖 U+1d2e0 𝋠 𝋡 𝋢 𝋣 𝋤 𝋥 𝋦 𝋧 𝋨 𝋩 𝋪 𝋫 𝋬 𝋭 𝋮 𝋯 𝋰 𝋱 𝋲 𝋳 U+1d360 𝍠 𝍡 𝍢 𝍣 𝍤 𝍥 𝍦 𝍧 𝍨 𝍩 𝍪 𝍫 𝍬 𝍭 𝍮 𝍯 𝍰 𝍱 𝍲 𝍳 𝍴 𝍵 𝍶 𝍷 𝍸 U+1e8c7 𞣇 𞣈 𞣉 𞣊 𞣋 𞣌 𞣍 𞣎 𞣏 U+1ec71 𞱱 𞱲s 𞱳 𞱴 𞱵 𞱶 𞱷 𞱸 𞱹 𞱺 𞱻 𞱼 𞱽 𞱾 𞱿 𞲀 𞲁 𞲂 𞲃 𞲄 𞲅 𞲆 𞲇 𞲈 𞲉 𞲊 𞲋 𞲌 𞲍 𞲎 𞲏 𞲐 𞲑 𞲒 𞲓 𞲔 𞲕 𞲖 𞲗 𞲘 𞲙 𞲚 𞲛 𞲜 𞲝 𞲞 𞲟 𞲠 𞲡 𞲢 𞲣 𞲤 𞲥 𞲦 𞲧 𞲨 𞲩 𞲪 𞲫 U+1ecad 𞲭 𞲮 𞲯 U+1ecb1 𞲱 𞲲 𞲳 𞲴 U+1ed01 𞴁 𞴂 𞴃 𞴄 𞴅 𞴆 𞴇 𞴈 𞴉 𞴊 𞴋 𞴌 𞴍 𞴎 𞴏 𞴐 𞴑 𞴒 𞴓 𞴔 𞴕 𞴖 𞴗 𞴘 𞴙 𞴚 𞴛 𞴜 𞴝 𞴞 𞴟 𞴠 𞴡 𞴢 𞴣 𞴤 𞴥 𞴦 𞴧 𞴨 𞴩 𞴪 𞴫 𞴬 𞴭 U+1ed2f 𞴯 𞴰 𞴱 𞴲 𞴳 𞴴 𞴵 𞴶 𞴷 𞴸 𞴹 𞴺 𞴻 𞴼 𞴽 🄋 🄌 U+20001 U+20064 𠁤 U+200e2 𠃢 U+20121 𠄡 U+2092a 𠤪 U+20983 𠦃 U+2098c 𠦌 U+2099c 𠦜 U+20aea 𠫪 U+20afd 𠫽 U+20b19 𠬙 U+22390 𢎐 U+22998 𢦘 U+23b1b 𣬛 U+2626d 𦉭 U+2f890 廾

    str.isidentifier():判断字符串是否符合标识符规则 str.islower():判断是否其中包含一个字母,且字母是小写状态 str.isprintable():判断字符串是可打印的;字符全部可打印或字符串为空 str.isspace():判断字符串是否空白;非空,空格、回车、制表等符号 str.istitle():判断字符串是否是标题,词组首写字母大写 str.isupper():判断字符串中的字母是大写状态 str.join(iterable):将iterable中的元素用str串起来;iterable中的元素全部为字符串。不可为数字、iterable等! str.ljust(width[,fillchar]):左对齐,宽度,填充用字符串,如果width<=len(str),无效/输出str str.lower():返回字符串,str中所有拥有大小写状态的字符都小写 str.lstrip([chars]):从左侧开始删除\剥除字符,直到遇到不是需要剥除的字符,默认是空格,可以设置多个字符。 static str.maketrans(x[,y[,z]]):创建一个字典,供str.translate()使用。字符集x转化为对应的字符集y,z是要删除的字符集

    In [65]: str.maketrans("abc","ABC","XYZ") Out[65]:{97: 65, 98: 66, 99: 67, 88: None, 89: None, 90: None} In [66]: "I Will Kill You".translate(str.maketrans("abc","ABC","XYZ")) Out[66]:'I Will Kill ou'

    str.partition(sep): 使用字符串sep对str进行分割,变成:(str[0:str.find(sep)],sep,余下的),如果str中没有找到sep,则返回(str,’’,’’)。返回的是这么三个元素的元组 str.replace(old,new[,count]):用new替换str中的old count次,如果没有赋值count则是所有 str.rfind(sub[,start[,end]]):从右向左在str中寻找sub,如果定义了start以及end,则在该范围内寻找。返回其索引位置,没找到就返回-1。start,end符合切片定义,即end是开区间,只包含到end-1 sub:substring,子字符串,sub有在之内的意思,减法中的sub是去掉在之内的 str.rindex(sub[,start[,end]]):从右边寻找,但是如果没有,则报错 str.rjust(width[,fillchar]):右对齐str,宽度width,用fillchar填充空出来的,如果width<len(str),则无效 just:正义的,公平的,对齐的,刚刚 str.rpartition(sep):从右边开始寻找sep并进行切分 str.rsplit(sep=None,maxsplit=-1):用sep对str进行分割,返回一个列表,maxsplit定义分割次数,sep默认为空格。 split:分离,劈开 sep会形成元素间的逗号,但是如果sep不是默认值,而是指定字符串,一串sep,只有第一个是逗号,其他全是空字符’’。如果sep置于str首尾,对应外侧也会是空字符。一般不指定分割次数,split与rsplit的结果是一样的。

    "1231231123".split("1") ['', '23', '23', '', '23']

    str.rstrip([chars]):移除str右侧/尾部的字符,默认空格,赋值为一个字符集合,移除该集合内所包含的字符,直至遇到其他字符。

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

    [26]: "1 2 3 4 ".split() Out[26]:['1', '2', '3', '4'] In [27]: "1 2 3 4 ".split(" ") Out[27]:['1', '', '', '2', '', '3', '4', ''] In [41]:1 "1 2 3 4 ".split("1",maxsplit=1) Out[41]:['', ' 2 3 4 '] In [28]: "1 2 3 4 ".split(" ") Out[28]:['1', ' 2', '3 4 '] In [35]: "".split(" ") Out[35]:[''] In [37]:"".split() Out[37]:[] In [38]: "".split("") --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-38-b8115af0001c> in <module> ----> 1 "".split("") ValueError: empty separator

    str.splitlines(keepdends=False):每行就是一个元素 每一行里必须有内容或者之后有内容,才会当作一个元素,这里专指最后一个回车,如果回车后再无字符,则这一行不会当作一个元素

    In [51]: "\n1\t2\n3\r5\t\n\n6".splitlines(keepends=True) Out[51]:['\n', '1\t2\n', '3\r', '5\t\n', '\n', '6'] In [45]: "\n1\t2\n3\r5\t\n\n".splitlines(keepends=True) Out[45]:['\n', '1\t2\n', '3\r', '5\t\n', '\n'] In [46]: "\n1\t2\n3\r5\t\n".splitlines() Out[46]:['', '1\t2', '3', '5\t']

    str.startswith(prefix[,start[,end]]) starts with; prefix 前缀:字符串或字符串组成的元组

    In [52]:"sdhasjkfhdsjkag".startswith(("fhd","sdh"),7,10) Out[52]:True

    str.strip([chars]):这个是要移除左右两侧/首尾的说

    str.swapcase():大小写互换 不一定:s.swapcase().swapcase() == s s = “ß”

    find_dif = lambda s: s.swapcase().swapcase() != s [chr(s) for s in range(100000) if find_dif(chr(s))] ['µ', 'ß', 'İ', 'ı', 'ʼn', 'ſ', 'ǰ', 'ͅ', 'ΐ', 'ΰ', 'ς', 'ϐ', 'ϑ', 'ϕ', 'ϖ', 'ϰ', 'ϱ', 'ϴ', 'ϵ', 'և', 'ᲀ', 'ᲁ', 'ᲂ', 'ᲃ', 'ᲄ', 'ᲅ', 'ᲆ', 'ᲇ', 'ᲈ', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'ẚ', 'ẛ', 'ẞ', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ᾐ', 'ᾑ', 'ᾒ', 'ᾓ', 'ᾔ', 'ᾕ', 'ᾖ', 'ᾗ', 'ᾠ', 'ᾡ', 'ᾢ', 'ᾣ', 'ᾤ', 'ᾥ', 'ᾦ', 'ᾧ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'ι', 'ῂ', 'ῃ', 'ῄ', 'ῆ', 'ῇ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'ῢ', 'ΰ', 'ῤ', 'ῦ', 'ῧ', 'ῲ', 'ῳ', 'ῴ', 'ῶ', 'ῷ', 'Ω', 'K', 'Å', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'ſt', 'st', 'ﬓ', 'ﬔ', 'ﬕ', 'ﬖ', 'ﬗ']

    str.title():单词首字母大写,其余字母小写

    str.upper():转化所有小写为大写 s.upper().isupper() 不一定,isupper需要至少一个小写字符,如果其中并没有区分大小写的字符,例如数字、中文等 str.zfill(width):左侧用0填充至字符串宽度为width,如果有正负号,则符号在第一位,之后再用0填充,str不一定只有数字,中文也可以

    In [79]:+ "+王".zfill(4) Out[79]:'+00王' In [82]:0 "+王".rjust(4,"0") Out[82]:'00+王'
    Processed: 0.019, SQL: 9