Advertisement

Python 常用基础知识点(二)—— 字符串

阅读量:

Python 常用基础知识点(二)—— 字符串

    • 基本说明
    • 常用方法
    • 一般方法
    • 内置方法
    • 格式化字符串
    • 字符串比较
      • 示例:
复制代码
    字符串是最常用的知识点,但一般常用的方法也就那么几个,这里列出的分为常用的一下方法和不太常用的一些方法。
    具体情况要看自己的使用情况,不同的人使用频度可能不一样,具体看自己怎么理解

基本说明

复制代码
    目前已知的 python3 标示字符串的方法有如下几种:
    1. 单引号 '
    2. 双引号 "
    3. 三引号 ''' 或 """
    4. 带前缀 r 或 R
    5. 带前缀 f 或 F (3.7+)

对于 1 和 2 的引号类型尚无明确区分。然而 Python 提供了灵活的混合引用方式,在实际编程中需要注意两端引用符号必须保持一致性。例如以下引用方式:'测试字符串'"混合引用字符串"以及"混合引用字符"

3 和 4 是用于展示原始字符串内容,并且这些格式信息也不会发生改变。例如,在输入中出现的换行符、制表符等都不会被转换。

5 是 当前版本(如3.7)设计的模板字符串表示方式,在代码中可以直接替换单元格中的变量名并插入对应的值。例如,在代码中使用 $\text{{name}}$ 就能实现将 name 变量的实际内容注入到该位置。

常用方法

复制代码
    replace(old, new,count=None)        替换方法,用指定的新字符串替换旧的字符串,第三个参数是 `count` 是可选值,替换次数,默认是全量替换
    find(str,beg=0,end=len(str))        查找指定的字符串,返回查找到的位置,默认从 0 开始查找,查找失败时返回 -1
    rfind(str, beg=0,end=len(string))   类似 find 方法,不过是从右边开始查找
    split(sep=None, maxsplit=-1)        按照指定的字符串拆分,`maxsplit` 拆分次数,默认值 -1 表示不限制 ,返回列表。常见用法如 英文通过空格拆分词等
    strip(chars=None)                   删除字符串开始和结束位置的指定字符,默认是删除空字符,还有两个类似方法如下
    lstrip(chars=None)                  类似 strip 方法,不过只删除字符串左边的指定字符
    rstrip((chars=None)                 类似 strip 方法,不过只删除字符串右边的指定字符
    capitalize()	                    字符串首字母大写(中文无效)
    title()	                            字符串单词首字母大写
    upper()                             字符串所有字母全大写
    lower()                             字符串所有字母全小写
    swapcase()                          字符串字母大小写反转,即大写转换为小写,小写转换为大写
    center(width , fillchar=None)       指定字符串的宽度并居中显示,剩余的使用指定字符填充剩余长度,使内容居中显示
    count(str,beg=0,end=len(str))       统计指定字符片段出现的次数
    startswith(str, beg=0,end=len(str)) 判断字符串是否以指定的字符开始(常用于协议判断等)
    endswith(str,beg=0,end=len(str))    判断字符串是否是以指定的字符串结尾(一般用于文件类型判断等)
    isalnum()                           判断字符串中是否至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
                                      类似正则表达式 /(A-Za-z\d)+/
    isalpha()                           判断字符串至少有一个字符并且所有字符都是字母(仅包含A-Z a-z)则返回True,否则返回False
                                      类似正则表达式 /(A-Za-z)+/
    isdigit()                           检测字符串是否仅包含数字(小数位 . 和 符号 +/- 都不行)
                                      类似正则表达式 /\d+/
    islower()                           检测字符串是否均为小写字母
    isnumeric()                         如果字符串中只包含数字字符,则返回 True,否则返回 False (没有发现与 `isdigit` 有什么区别)
    isspace()                           检测字符串中所有字符是否均为空白字符
    istitle()                           判断字符串中单词首字母是否大写
    isupper()                           判断字符串是否都是大写
    isdecimal()                         判断字符串是否只包含十进制数字

这些方法都比较简单, 而且在api列表中提供的信息也非常详尽, 无需进一步举例说明。

一般方法

复制代码
    index(str,beg=0,end=len(str))	    同 find 方法,不过唯一不同的是如果查找失败了,会抛出 ValueError 而不是返回 -1
    ljust(width,fillchar=None)         返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格 
    rjust(width,fillchar=None)          返回一个原字符串右对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格 
    zfill(width)                        返回长度为 width 的字符串,原字符串右对齐,前面填充0
    rindex( str, beg=0, end=len(str))   查找字符串片段,同 index ,不过是从右边开始查找
    expandtabs(tabsize=8)               替换字符串中的制表符,默认使用 8 个空格替换制表符(一般是 \t)
    splitlines(keepends=None)           按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,否则则保留换行符
    translate(table,deletechars="")     根据 str 给出的表(包含256个字符)转换为 string 的字符,要过滤掉的字符放在 deletechars 参数中

可以了解,也比较简单,可能部分方法也比较常用

内置方法

复制代码
    len(string)						获取字符串长度
    format(*args, **kwargs)	        {} ,替换通配符,内部可以包含数字或参数名称,
    max(str)						返回字符串 str 中最大的字母
    min(str)						返回字符串 str 中最小的字母

其他内容较为简单。
从直观上看并没有什么明显的问题。
主要介绍format方法的话,它实际上就是内部使用一个Formatter类实现了它的format方法,并且这个功能非常强大。

复制代码
    # 空占位符
    testStr = "test message {}"
    print(testStr.format(", 空占位符"))                              #   test message , 空占位符
    
    # 数字占位符
    testStr1 = "test message {0}"
    print(testStr1.format(", 数字占位符 0 "))                        #   test message , 数字占位符 0 
    
    # 多个空占位符
    testStr2 = "test message {} {}"
    print(testStr2.format(", 第一个空占位符 ", ", 第二个空占位符 "))  #   test message , 第一个空占位符  , 第二个空占位符 
    
    # 多数字占位符
    testStr3 = "test message {0}{1}{0}"
    print(testStr3.format(", 数字占位符 0 ", ", 数字占位符 1 "))      #   test message , 数字占位符 0 , 数字占位符 1 , 数字占位符 0 
    
    # 变量(形参)名占位符
    testStr4 = "test message {addMsg}"
    print(testStr4.format(addMsg=', assMsg 名称占位符'))             #   test message , assMsg 名称占位符
    
    # 集合类占位符
    user = {
    'name': 'python',
    'age': 29
    }
    testStr5 = "{name} have {age} years old!"
    print(testStr5.format(**user))                                  #   python have 29 years old!
    # set 集合,参数如果是整体匹配,必须以数字 0 开始,与内部实现机制有关
    color = ('white', 'black')
    data = ("set 测试1", "set 测试1")
    testStr6 = " set format test {0[0]} {0[1]} | {1[0]}  {1[1]}"    #    set format test white black | set 测试1  set 测试1
    print(testStr6.format(color, data))
    # 对齐文本并指定宽度,类似 MarkDown 语法
    # 左对齐
    '{:<30}'.format('left aligned')                                 # 'left aligned                  '
    # 右对齐 :>30  居中对齐 :^30
    # 居中对齐并使用 * 填充剩余空位
    '{:*^30}'.format('centered')                                    #'***********centered***********'
    # 显示浮点数
    '{:+f}; {:+f}'.format(3.14, -3.14)                              # '+3.140000; -3.140000'
    # 指定小数位
    '{:+1.5f}; {:+.3f}'.format(3.14, -3.14)                         # '+3.140000; -3.140'
    # 默认格式 {:+/-整数位.小数位f} 即 符号,整数长度(超过忽略),.(小数点),小数位(超过截取指定长度)
    
    # 进制转换
    "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)  # 'int: 42;  hex: 2a;  oct: 52;  bin: 101010'
    # 带前缀的进制转换
    "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)  # 'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'
    # 英式数据格式化展示
    '{:,}'.format(1234567890)                                       # '1,234,567,890'
    
    # 百分比保留指定小数位
    '100/3 = {:.2%}'.format(100 / 3)  # 10/3 = 3333.33%
    print('10/3 = {:.2%}'.format(100 / 3))
    # 时间格式化
    import datetime
    '{:%Y-%m-%d %H:%M:%S}'.format(datetime.datetime(2020, 7, 4, 12, 15, 58))    #   '2020-07-04 12:15:58'
    # 其他复杂嵌套等

格式化字符串

复制代码
    %c		单个字符串	
    %d		十进制整数
    %o		八进制整数
    %s		字符串	
    %x		十六进制的整数,其中的字母小写
    %X		十六进制的整数,其中的字母大写

相对简单而言,
可以将特定字符转换为特定格式,
方便尝试者自行操作,
主要涉及数字进制处理,
其底层实现依赖于 format 方法。

字符串比较

复制代码
    is		判断是否是同一个对象,比较对象 id 值
    ==		判断是否相同,比较对象值

示例:

复制代码
    str1 = 'test'
    # 普通拼接还是同一个内存地址,只能这么操作了。拼接有的时候会是不同地址
    str2 = str1[:2] + 'st'
    print(str1 == str2)
    print(str1 is str2)
    print("str1 id = " , id(str1))
    print("str2 id = " , id(str2))

结果如下:
True
False
str1 id = 1454228727824
str2 id = 1454228699936

下一篇文章:《Python核心知识点(三)——列表》

全部评论 (0)

还没有任何评论哟~