美文网首页
Python学习笔记(3)之字符串string

Python学习笔记(3)之字符串string

作者: 单嘉伟xx | 来源:发表于2018-09-07 00:14 被阅读0次

    0.写在前面

    来北京一周了,玩了几个地方,见了几位老同学,发现这座城市有着它独特的魅力,深深吸引着我。不知当初坚持选择来北京是否是一个正确的选择,走走看吧。

    鸽了好多天,终于静下心来写点东西啦。现在是零点整,窗外仍时不时地传来车流声。在这个行色匆匆的城市里,稍微停一下脚步就有可能被抛弃。所以,加油吧!自己选择的路就坚持走下去!

    PS:再次由衷感谢北京的朋友们的热情款待,争取今年趁大家毕业前去你们的校园里转一转,也祝大家保研or考研or工作顺利!

    1.引入

    Python处理字符串最神奇的地方在于它将字符串看作是一个序列,因此可以对字符串做各种各样的针对序列的操作。

    索引
    >>> test = 'Python'
    >>> test[3]
    'h'
    
    循环
    >>> test = 'Python'
    >>> for each in test:
            print(each,end='^0^')
    
    P^0^y^0^t^0^h^0^o^0^n^0^
    
    转化成列表
    >>> test = 'Python'
    >>> list(test)
    ['P', 'y', 't', 'h', 'o', 'n']
    
    打包(可进一步转化成字典)
    >>> test = 'Python'
    >>>index = ['1st','2nd','3rd','4th','5th','6th']
    
    >>> zip(index,test)         #打包,得到一个映射
    <zip object at 0x000001FC83DC9588>
    
    >>> list(zip(index,test))
    [('1st', 'P'), ('2nd', 'y'), ('3rd', 't'), ('4th', 'h'), ('5th', 'o'), ('6th', 'n')]
    
    >>> dict1 = dict(zip(index,test))    #得到字典
    >>> print(dict1)
    {'1st': 'P', '2nd': 'y', '3rd': 't', '4th': 'h', '5th': 'o', '6th': 'n'}
    >>> dict1['3rd']
    't'
    
    >>> test = 'Python'
    >>> list(enumerate(test))     #利用enumerate函数打包索引值与对应元素
    [(0, 'P'), (1, 'y'), (2, 't'), (3, 'h'), (4, 'o'), (5, 'n')]
    

    2. 转义字符串

    和其他一些编程语言一样,反斜杠\在Python充当转义字符的作用,即如果字符串中出现特殊字符时可以用反斜杠\进行转义,例如:

    >>> print('Let's go!')        
    SyntaxError: invalid syntax   #报错
    
    >>> print('Let\'s go!')  
    Let's go!
    

    有时字符串中的一些符号组合在一起会出现一些奇怪的现象,例如要想打印C:\now

    >>> print('C:\now')   
    C:
    ow
    

    Python默认将\n识别为换行符。解决这类问题有两种办法,一是通过\对反斜杠进行转义

    >>> print('C:\\now')  
    C:\now
    

    二是利用原始字符串,即在字符串前加r,这样Python便会忽略字符串中的转移符。

    >>> print(r'C:\now')  
    C:\now
    

    注:原始字符串不能以\结尾,否则会报错

    >>> print(r'C:\now\') 
    SyntaxError: EOL while scanning string literal
    

    可以这样处理

    >>> print(r'C:\now''\\')
    C:\now\
    

    3.字符串的格式化

    所谓格式化字符串,可以简单理解为将一种格式的字符串转化成另一种格式。常用的方法有两种:

    3.1 百分号%方法

    格式为 %[(name)][flags]typecode % tuple or dict

    • (name):可选参数,用于选择指定的key。name存在时,后面应用字典dict。
    • flags:可选辅助参数,在表2中列出。
    • typecodes:必选格式化符号,在表1中列出

    表1:字符串格式化符号含义

    符号 说明
    %c 格式化字符及其 ASCII 码
    %s 格式化字符串
    %d 格式化整数
    %o 格式化无符号八进制数
    %x 格式化无符号十六进制数
    %X 格式化无符号十六进制数(大写)
    %f 格式化浮点数字,可指定小数点后的精度(默认保留小数点后6位)
    %e 用科学计数法格式化浮点数
    %E 作用同 %e,用科学计数法格式化浮点数
    %g 根据值的大小决定使用 %f 或 %e
    %G 作用同 %g,根据值的大小决定使用 %f 或者 %E

    注:

    1. Python中百分号格式化是不存在自动将整数转换成二进制表示的方式
    2. 当字符串中存在格式化标志%时,需要用 %%表示一个百分号
    >>> '%(num)d 的八进制数为 %(num)o' % {'num' : 10}
    '10 的八进制数为 12'
    
    >>> 'My name is %s. I`m %d years old.' % ('单嘉伟', 18)
    'My name is 单嘉伟. I`m 18 years old.'
    

    表2:格式化操作符辅助命令

    符号 说明
    m.n m 是显示的最小宽度,n 是小数点后的位数
    - 用于左对齐
    + 在正数前面显示加号(+)
    # 在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X'
    0 显示的数字前面填充 '0' 取代空格

    注:所谓最小宽度,即若输入的字符长度大于设定值,则无视;小于的话则在前方用空格补齐,即右对齐。

    >>> '数数数字前有几个空格%5d' % 25
    '数数数字前有几个空格   25'
    
    >>> '%.5f' % 25
    '25.00000'
    
    >>> '%+05d' % 2.5
    '+0002'
    
    >>> '%#5o' % 17
    ' 0o21'
    

    3.2 format方法

    str.format()方法利用{}:来取代%,可通过位置参数和关键字参数进行格式化

    3.2.1 位置参数
    >>> '{0} is my best {2}, I love {0} very much!'.format('Python','aha','friend')
    'Python is my best friend, I love Python very much!'
    

    {}中不加数字的话,Python会按顺序由前到后索引。

    >>> '{} is my best {}, I love {} very much!'.format('Python','friend','Python','aha')
    'Python is my best friend, I love Python very much!'
    
    3.2.2 关键字参数
    >>> '{name} is my best {relation}, I love {name} very much!'.format(name='Python',relation='friend')
    'Python is my best friend, I love Python very much!'
    

    注:

    1. 位置参数和关键字参数可以同时存在,但.format()中必须位置参数在前,关键字参数在后!
    >>> '{0} is my best {relation}, I love {0} very much!'.format('Python',relation='friend')
    'Python is my best friend, I love Python very much!'
    
    1. 可用列表及对应索引值改进位置参数
    >>> list1 = ['Python' , 'friend']
    >>> '{0[0]} is my best {0[1]}'.format(list1)
    'Python is my best friend'
    
    1. 可用字典(映射)改进关键字参数,需在字典前加**
    >>> dict1=dict(name='Python',relation='friend')
    >>> '{name} is my best {relation}'.format(**dict1)
    'Python is my best friend'
    
    3.2.3 格式限定符

    语法是在{}中带:

    常用的操作符有

    1. ^<>分别是居中、左对齐、右对齐。前面与冒号之间只能是一个字符,表示用于填充的符号;后面跟最小宽度。
    >>> '{:>8}'.format(17)
    '      17'
    
    >>> '{:a<8}'.format(17)
    '17aaaaaa'
    
    >>> '{:.^7}'.format(17)
    '..17...'
    
    1. 格式化浮点数时可用m.nf的形式,m为最小宽度,n为精度。
    >>> '{:K^9.3f}'.format(17.1)
    'K17.100KK'
    
    1. b、d、o、x(X) 分别是二进制、十进制、八进制、十六进制
    >>> '{:b}'.format(17)   #将17转化成二进制数
    '10001'
    
    >>> '{:d}'.format(17)   #将17转化成十进制数
    '17'
    
    >>> '{:o}'.format(17)   #将17转化成八进制数
    '21'
    
    >>> '{:x}'.format(17)   #将17转化成十六进制数
    '11'
    
    1. ,号还能用来做金额的千位分隔符
    >>> '{:,}'.format(250000000000)
    '250,000,000,000'
    

    4. 字符串的各类BIF

    函数 功能
    capitalize() 把字符串的第一个字符改为大写
    casefold() 把整个字符串的所有字符改为小写
    center(width) 将字符串居中,并使用空格填充至长度 width 的新字符串
    count(sub[, start[, end]]) 返回 sub 在字符串里边出现的次数,start 和 end 参数表示范围,可选。
    encode(encoding='utf-8', errors='strict') 以 encoding 指定的编码格式对字符串进行编码。
    endswith(sub[, start[, end]]) 检查字符串是否以 sub 子字符串结束,如果是返回 True,否则返回 False。start 和 end 参数表示范围,可选。
    expandtabs([tabsize=8]) 把字符串中的 tab 符号(\t)转换为空格,如不指定参数,默认的空格数是 tabsize=8。
    find(sub[, start[, end]]) 检测 sub 是否包含在字符串中,如果有则返回索引值,否则返回 -1,start 和 end 参数表示范围,可选。
    index(sub[, start[, end]]) 跟 find 方法一样,不过如果 sub 不在 string 中会产生一个异常。
    isalnum() 如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。
    isalpha() 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。
    isdecimal() 如果字符串只包含十进制数字则返回 True,否则返回 False。
    isdigit() 如果字符串只包含数字则返回 True,否则返回 False。
    islower() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False。
    isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False。
    isspace() 如果字符串中只包含空格,则返回 True,否则返回 False。
    istitle() 如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写),则返回 True,否则返回 False。
    isupper() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。
    join(sub) 以字符串作为分隔符,插入到 sub 中所有的字符之间。
    ljust(width) 返回一个左对齐的字符串,并使用空格填充至长度为 width 的新字符串。
    lower() 转换字符串中所有大写字符为小写。
    lstrip() 去掉字符串左边的所有空白符
    partition(sub) 找到子字符串 sub,把字符串分成一个 3 元组 (pre_sub, sub, fol_sub),如果字符串中不包含 sub 则返回 ('原字符串', '', '')
    replace(old, new[, count]) 把字符串中的 old 子字符串替换成 new 子字符串,如果 count 指定,则替换不超过 count 次。
    rfind(sub[, start[, end]]) 类似于 find() 方法,不过是从右边开始查找。
    rindex(sub[, start[, end]]) 类似于 index() 方法,不过是从右边开始。
    rjust(width) 返回一个右对齐的字符串,并使用空格填充至长度为 width 的新字符串。
    rpartition(sub) 类似于 partition() 方法,不过是从右边开始查找。
    rstrip() 删除字符串末尾的空白符。
    split(sep=None, maxsplit=-1) 不带参数默认是以空格为分隔符切片字符串,如果 maxsplit 参数有设置,则仅分隔 maxsplit 个子字符串,返回切片后的子字符串拼接的列表。
    splitlines(([keepends])) 按照'\n'分割,返回一个包含各行元素的列表。如果keepends参数指定,这返回前keepends行
    startswith(prefix[, start[, end]]) 检查字符串是否以 prefix 开头,是则返回 True,否则返回 False。start 和 end 参数可以指定范围检查,可选。
    strip([chars]) 删除字符串前边和后边所有的空白符(包括\n、\r、\t、' ',即:换行、回车、制表符、空格),chars 参数可以定制删除的字符,可选。
    swapcase() 翻转字符串中的大小写。
    title() 返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串。
    translate(table) 根据 table 的规则(可以由 str.maketrans('a', 'b') 定制)转换字符串中的字符。
    upper() 转换字符串中的所有小写字符为大写。
    zfill(width) 返回长度为 width 的字符串,原字符串右对齐,前边用 0 填充。

    参考资料:字符串的方法及注释

    这么多BIF背过是不可能的。。。就用的时候现查吧,或许用的多了就熟悉了,用法也都蛮简单的,几个不太清楚的举个例子

    join()

    调用格式为str.join(sub),其中str和sub都是字符串,输出结果是将str插入到sub中。

    >>> test = '^0^'
    >>> test.join('Python')
    'P^0^y^0^t^0^h^0^o^0^n'
    

    split()

    对字符串进行切片并转换成列表,默认以空格进行分割,若有输入参数则按该参数进行分割,maxsplit表示最大切割次数。

    >>> test = 'I love Python'
    
    >>> test.split()
    ['I', 'love', 'Python']
    
    >>> test.split('o')
    ['I l', 've Pyth', 'n']
    
    >>> test.split(maxsplit=1)
    ['I', 'love Python']
    

    translate()

    该函数的输入参数是一个转换表table,table可用函数str.maketrans(intab,outtab)生成,其中intab和outtab必须是长度相同的字符串。例如

    >>> test = 'I love Python'
    >>> table = str.maketrans('Ithon', '12345')
    >>> test.translate(table)
    '1 l4ve Py2345'
    

    往期回顾

    Python学习笔记(0)之Hello,python!
    Python学习笔记(1)之列表list
    Python学习笔记(2)之元组、字典&集合

    相关文章

      网友评论

          本文标题:Python学习笔记(3)之字符串string

          本文链接:https://www.haomeiwen.com/subject/yhlzwftx.html