• 零基础入门学习Python(14)--字符串:各种奇葩的内置方法


    前言

    这节课我们回过头来,再谈一下字符串,或许我们现在再来谈字符串,有些朋友可能觉得没必要了,甚至有些朋友就会觉得,不就是字符串吗,哥闭着眼也能写出来,那其实关于字符串还有很多你不知道的秘密哦。由于字符串在日常生活中是如此的常见,因此小甲鱼抱着负责任的态度,在这节课上,把所有知道的东西都倒出来跟大家分享下。
    无论说你是之前学过了也好,再怎么熟悉也好,因为我们字符串有非常多的方法,而且很多方法都是比较奇葩的,而且这些方法在Python2.x 与Python3.x中都略有差别。,所以大家可以把这节课当作一次复习。

    我们学习的列表和元组,都支持分片操作,事实上我们的字符串也是支持的,例如:

    >>> str1 = 'i love fishc.com'
    >>> 
    >>> str1[:6]
    'i love'
    

    下面谈一下python各种奇葩的字符串内置方法

    知识点

    方法 定义 举例
    capitalize() 把字符串的第一个字符改为大写 >>> str2 = 'xiaoxie'
    str2.capitalize()
    'Xiaoxie'
    casefold() 把整个字符串的所有字符都改为小写 >>> str2 = 'XiAoXie'
    >>> str2.casefold()
    'xiaoxie'
    center(width) 将字符串居中,并使用空格填充至长度width的新字符串 >>> str2 = 'ju Zhong'
    >>> str2.center(18)
    ' ju Zhong '
    ljust(width) 返回一个左对齐的字符串,并使用空格填充至长度为width的新字符串 >>> str2 = '小鲫鱼'
    >>> str2.ljust(5)
    '小鲫鱼 '
    rjust(width) 返回一个右对齐的字符串,并使用空格填充至长度为width的新字符串。 >>> str2 = 'kongge'
    >>> str2.rjust(10)
    ' kongge'
    zfill(width) 返回长度为width的字符串,原字符串右对齐,前边用0填充。 >>> str2 = 'fsfas12123sfsfsfsf'
    >>> str2.zfill(5)
    'fsfas12123sfsfsfsf'
    >>> str2.zfill(50)
    '00000000000000000000000000000000fsfas12123sfsfsfsf'
    count(sub[,start[,end]]) 返回sub在字符串里出现的次数,start和end参数表示范围,可选。 >>> str2 = 'fswfff'
    >>> str2.count('f')
    4
    >>> str2.count('f',3,5)
    2
    encode(encoding=’utf8’,errors=’strict’) 以encoding指定的编码格式对字符串进行编码。
    encoding – 要使用的编码,如”UTF-8”。
    errors – 设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeError。 其他可能得值有 ‘ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过 codecs.register_error() 注册的任何值。
    >>> str ='编码'
    >>> str_utf8 = str.encode('UTF8')
    >>> str_gbk = str.encode('GBK')
    >>> print(str)
    编码
    >>> print(str_utf8)
    b'xe7xbcx96xe7xa0x81'
    >>> print(str_gbk)
    b'xb1xe0xc2xeb'
    >>> print(str_utf8.decode('utf8'))
    编码
    >>> print(str_gbk.decode('gbk'))
    编码
    endswith(sub[,start[,end]]) 检查字符串是否以sub字符串结束,如果是返回True,否则返回False。start和end参数表示范围,可选。
    >>> str2 = '我爱你我'
    >>> str2.endswith('我')
    True
    >>> str2.endswith('我',1,3)
    False
    >>> str2.endswith('我',1,4)
    True
    expandtabs([tabsize=8]) 把字符串中的tab符号( )转换为空格,如不指定参数,默认的空格数是tabsize=8 >>> str2 = 'geck f'
    >>> str2.expandtabs()
    'geck f'
    >>> temp = len(str2.expandtabs())
    >>> temp
    9
    >>> len(str2)
    6
    >>> str2.expandtabs(40)
    'geck f'
    >>> len(str2.expandtabs(40))
    41
    isalpha() 如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回False >>> str2 = 'fsfs'
    >>> str2.isalpha()
    True
    isalnum() 如果字符串至少有一个字符并且所有字符都是字幕或数字则返回True,否则返回False。 `>>> str2 = 'fsaa'
    >>> str2.isalnum()
    True
    >>> str2 = 'fs1'
    >>> str2.isalnum()
    True
    >>> str2 = '1.3'
    >>> str2.isalnum()
    False
    >>> str2 = ' '
    >>> str2.isalnum()
    False
    >>> str2 = '+'
    >>> str2.isalnum()
    False
    isdecimal() 如果字符串只包含十进制数据则返回True,否则返回False >>> str2 = '123456'
    >>> str2.isdecimal()
    True
    >>> str2 = '123456f'
    >>> str2.isdecimal()
    False
    >>> str2 = '123.456'
    >>> str2.isdecimal()
    False
    isdigit() 如果字符串只包含数字则返回True,否则返回False。
    >>> str2 = '111111'
    >>> str2.isdigit()
    True
    isnumeric() 如果字符串中只包含数字字符,则返回True,否则返回False。 >>> str2 = '13Ⅳ'
    >>> str2.isnumeric()
    True
    >>> str2 = '四'
    >>> str2.isnumeric()
    True
    islower() 如果字符串至少包含一个区分大小写的字符,并且这些字符都是小写,则返回True,否则返回False。 >>> str2 = '12fsfs'
    >>> str2.islower()
    True
    isupper() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回True,否则返回False。 >>> str2 = '1F'
    >>> str2.isupper()
    True
    >>> str2 = '1Fs'
    >>> str2.isupper()
    False
    lower() 转换字符串中所有大写字符为小写 >>> str2 = 'FFSA小甲鱼11'
    >>> str2.lower()
    'ffsa小甲鱼11'
    upper() 转换字符串中的所有小写字符为大写 >>> str2 = 'fsfas12123sfsfsfsf'
    >>> str2.upper()
    'FSFAS12123SFSFSFSF'
    swapcase() 翻转字符串中的大小写 >>> str2 = 'fISH lOVE'
    >>> str2.swapcase()
    'Fish Love'
    lstrip() 去掉字符串左边的所有空格。 >>> str2 = ' f s fs'
    >>> str2.lstrip()
    'f s fs'
    rstrip() 删除字符串末尾的空格。 >>> str2 = ' fsfs '
    >>> str2.rstrip()
    ' fsfs'
    strip([chars]) 删除字符串前边和后边所有的空格,chars参数可以定制删除的字符,可选。 >>> str2 = ' w a n b x i n'
    >>> str2.strip()
    'w a n b x i n'
    >>> str2.strip('n')
    ' w a n b x i '
    >>> str2.strip('w')
    ' w a n b x i n'
    >>> str2.strip(' w')
    'a n b x i n'
    isspace() 如果字符串中只包含空格,则返回True,否则返回False。 >>> str2 = 'xiaoxie'
    >>> str2.xxx
    >>> str2 = ' '
    >>> str2.isspace()
    True
    title() 返回标题化(所有单词都是以大写开始,其余字母均小写)的字符串 >>> str2 = 'fish love'
    >>> str2.title()
    'Fish Love'
    istitle() 如果字符串中是标题化(所有的单词都是大写开始,其余字母均小写),则返回True,否则False。 >>> str2 = 'xiaoxie'
    >>> str2 = 'Feng Zhong'
    >>> str2.istitle()
    True
    partition(sub) 找到字符串sub,把字符串分成一个3元组(pre_sub,sub,fol_sub),如果字符串中不包含sub则返回(‘原字符串’,”,”) >>> str2 = 'partition'
    >>> str2.partition('pa')
    ('', 'pa', 'rtition')
    >>> str2.partition('ti')
    ('par', 'ti', 'tion')
    >>> str2.partition('fs')
    ('partition', '', '')
    rpartition(sub) 类似于partition()方法,不过是从右边开始查找。 >>> str2 = 'partition'
    >>> str2.rpartition('fs')
    ('', '', 'partition')
    replace(old,new[,count]) 把字符串中的old字符串替换成new字符串,如果count指定,则替换不超过count次 >>> str2 = '1f2f3f4f5f'
    >>> str2.replace('f','d')
    '1d2d3d4d5d'
    >>> str2.replace('f','d',2)
    '1d2d3f4f5f'
    find(sub[,start[,end]]) 检测sub是否包含在字符串中,如果有则返回索引值,否则返回-1,start和end参数表示范围,可选。 >>> str2 = '感谢小甲鱼'
    >>> str2.find('小')
    2
    >>> str2.find('小',3,5)
    -1
    rfind(sub[,start[,end]]) 类似于find()方法,不过是从右边开始查找。 >>> str2 ='1a2b3c4d5b'
    >>> str2.rfind('b')
    9
    index(sub[,start[,end]]) 与find方法一样,但是如果sub不在sring中会产生一个异常。 >>> str2.index('小')
    2
    >>> str2.index('小m')
    Traceback (most recent call last):
    File "<pyshell#68>", line 1, in <module>
    str2.index('小m')
    ValueError: substring not found
    rindex(sub[,start[,end]]) 类似于index()方法,不过是从右边开始查找。 >>> str2 ='1a2b3c4d5b'
    >>> str2.rindex('b')
    9
    join(sub) 以字符串作为分隔符,插入到sub中所有的字符之间。 >>> str2 = '小甲鱼'
    >>> str2.join('12345')
    '1小甲鱼2小甲鱼3小甲鱼4小甲鱼5'
    split(sep=None,maxsplit=-1) 不带参数默认以空格为分隔符切片字符串,如果maxsplit参数有设置,则仅分隔maxsplit个字符串,返回切片后的字符串拼接的列表。 >>> str = 'i love fishc'
    >>> str.split()
    ['i', 'love', 'fishc']
    >>> str.split('l',2)
    ['i ', 'ove fishc']
    splitlines([keepends]) Python splitlines() 按照行(‘ ’, ‘ ’, ’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 >>> str2 = 'ab c de fg kl '
    >>> str2.splitlines()
    ['ab c', '', 'de fg', 'kl']
    >>> str2.splitlines(False)
    ['ab c', '', 'de fg', 'kl']
    >>> str2.splitlines(True)
    ['ab c ', ' ', 'de fg ', 'kl ']
    startswith(prefix[,start[,end]]) 检查字符串是否以prefix开头,是则返回True,否则返回False。start和end参数可以指定范围检查,可选。 >>> str2 = 'qanfin'
    >>> str2.startswith('q')
    True
    >>> str2.startswith('f',3)
    True
    translade(table) 根据table的规则(可以由str.maketrans(‘a’,’b’)定制)转换字符串中的字符。 >>> str2 = 'fsfas12123sfsfsfsf'
    >>> str2.translate(str.maketrans('f','b'))
    'bsbas12123sbsbsbsb'

    课后习题

    测试题

    • 如何定义一个跨越多行的字符串吗?(请至少写出两种实现的方法)?
    方法一:
    >>> str1='''床前明月光,
    疑是地上霜,
    举头望明月,
    低头思故乡。'''
    
    方法二:
    >>> str1='床前明月光,
    疑是地上霜,
    举头望明月,
    低头思故乡。'
    
    方法三:
    >>> str1=('床前明月光,'
    '疑是地上霜,'
    '举头望明月,'
    '低头思故乡。')
    • 三引号字符串通常我们用于做什么使用?
    三引号字符串不赋值的情况下,通常当作跨行注释使用,例如:
    
    '''这是一个三引号字符串用于注释的例子,
    例子虽然只是简简单单的一句话,
    却毫无遮掩地体现了作者用情至深,
    所谓爱至深处情至简!'''
    
    print("I love FishC.com!")
    ================== RESTART: C:/Users/ThinkPad/Desktop/5.py ==================
    I love FishC.com!
    
    • file1 = open('C:WindowsTemp eadme.txt','r')表示只读方式打开C:windows emp eadme.txt这个文本文件,但事实上这个语句会报错,知道为什么吗?你会如何修改?
    >>> file1 = open('C:WindowsTemp
    eadme.txt','r')
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        file1 = open('C:WindowsTemp
    eadme.txt','r')
    OSError: [Errno 22] Invalid argument: 'C:\Windows\Temp
    eadme.txt'

    会报错是因为在字符串中,我们约定 分别表示横向制表符(TAB)回车符,详见字符串格式化符号含义及转义字符含义,因此并不会按照我们计划的路劲去打开文件。
    Python为我们铺好了解决的道路,只需要使用原始字符串操作符(R或r)即可:

    file1 = open(r'C:WindowsTemp
    eadme.txt','r')
    • **有字符串:str1 = '<a href="http://www.fishc.com/dvd" target="_blank">鱼C资源打包</a>'
      ,请问如何提取子字符串:www.fishc.com**
    str1[str1.find('www.fishc.com'):str1.find('/dvd')]
    'www.fishc.com'
    • 如果使用负数作为索引值进行分片操作,按照第三题的要求你能正确目测出结果吗?
    >>> str1[-45:-32]
    'www.fishc.com'
    • 还是上题的字符串,请问下边语句会显示什么内容?
    >>> str1[20:-36]
    'fishc'
    • 怎么解开此字符串:str1='i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
    >>> str1[::3]
    'ilovefishc.com'

    动动手

    请写一个密码安全性检查的代码:check.py

    密码安全性检查代码

    低级密码要求:
    1. 密码由单纯的数字或字母组成
    2. 密码长度小于等于8位

    中级密码要求:
    1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|)任意两种组合
    2. 密码长度不能低于8位

    高级密码要求:
    1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|)三种组合
    2. 密码只能由字母开头
    3. 密码长度不能低于16位

    # 密码安全性检查代码
    #
    # 低级密码要求:
    #   1. 密码由单纯的数字或字母组成
    #   2. 密码长度小于等于8位
    #
    # 中级密码要求:
    #   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|)任意两种组合
    #   2. 密码长度不能低于8位
    #
    # 高级密码要求:
    #   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|)三种组合
    #   2. 密码只能由字母开头
    #   3. 密码长度不能低于16位
    
    
    symbols = r'''`!@#$%^&*()_+-=/*{}[]|'";:/?,.<>'''
    chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    nums = '0123456789'
    
    passwd = input('请输入需要检查的密码组合:')
    
    # 判断长度
    length = len(passwd)
    
    while (passwd.isspace() or length ==0):
        passwd = input("您输入的密码为空(或空格),请重新输入:")
        length = len(passwd)
    if length <=8:
        flag_len = 1
    elif 8< length < 16:
        flag_len = 2
    else:
        flag_len = 3
    
    flag_con = 0
    # 判断是否包含特殊字符
    for each in passwd:
        if each in symbols:
            flag_con +=1
            break
    
    
    # 判断是否包含字母
    for each in passwd:
        if each in chars:
            flag_con +=1
            break
    
    # 判断是否包含数字
    for each in passwd:
        if each in nums:
            flag_con +=1
            break
    
    
    # 打印结果
    while 1:
        print("您的密码安全级别评定为:",end='')
        if flag_len == 1 or flag_con == 1:
            print("低")
        elif flag_len == 3 and flag_con ==3 and (passwd[0] in chars):
            print("高")
            print("请继续保持")
            break
        else:
            print("中")
    
        print("请按以下方式提升您的密码安全级别:
    
        	1. 密码必须由数字、字母及特殊字符三种组合
    
        	2. 密码只能由字母开头
    
        	3. 密码长度不能低于16位")
        break
    
  • 相关阅读:
    hadoop脑裂
    磁盘动态扩容
    zookeeper快照清理
    hadoop rebalance
    redis
    斜率场--微分方程图形解
    simpson法计算arctan(1)-即pi/4
    反函数的导数
    动能公式推导
    schwarz( 施瓦兹)不等式证明
  • 原文地址:https://www.cnblogs.com/wanbin/p/9514697.html
Copyright © 2020-2023  润新知