zoukankan      html  css  js  c++  java
  • Python基础-字符串的使用

    基础知识

    字符串解释:字符串是不可变的,所有元素赋值和切片赋值操作都是非法的,属于序列一种(字符串、元组、列表)。

     一、格式化字符串

    (1)、format()方法==str.format()

    作用:将传入的参数进行格式化

    1、替换字段名的两种方法:要替换的字符可以没有名称或使用索引值

    >>> "{foo},{},{bar},{}".format(1,2,foo=0,bar=5)
    
    '0,1,5,2'
    
    >>> "{foo},{0},{bar},{1}".format(1,2,foo=0,bar=5)
    
    '0,1,5,2'

    2、还可以使用%进行格式化

    >>> "This is a test values %#s" % 10  (这里百分号后面必须是s字符等)
    
    'This is a test values 10'

    二、为字符串赋值

    还可使使用常规的方法,给出一个序列,通过索引值进行赋值

    如:

    >>> fullname = ['Liu','GUO']
    
    >>> "Mr {name[1]},you are right".format(name=fullname)
    
    'Mr GUO,you are right'

     格式字符串中的基本转换

    有跟在叹号后面的三个转换标志(s(str),r(repr),a(ASCII))

    如:

    {values1!s }

    和跟在冒号“:”后面的转换类型(格式化说明符)(b,c,d,e,E,f,F,g,G,n,o,s,x,X,%)

    如:

    {values:b}

    它们都是作用于str.format对字符串格式化,如果使用(%)进行格式化字符串则不需要使用到“!”和“:”,直接使用%s,%d等

    宽度表示方法

    >>> "{a:10}".format(a=5)
    
    '         5' 

    精度的表示方法

    >>> from math import pi
    
    >>> "This is a values {pi:.2f}".format(pi=pi)
    
    'This is a values 3.14' 

    千位分隔符

    >>> "This is a kill a {:,}".format(5**1000)
    
    同时指定其它格式设置元素时,这个逗号应该放在宽度和精度的句点之间

    符号,对齐,和用0填充

    使用0填充:>>> '{:010.2f}'.format(pi)红色字体那里表示用什么填充
    
    左对齐(<):>>> '{:<10.2f}'.format(pi)
    
    右对齐(>):>>> '{:>10.2f}'.format(pi)
    
    居中对齐(^):>>> '{:^10.2f}'.format(pi)

    str将数字、列表、字典、range对象转为字符串

    1、 将数字转换为字符串

    >>> price=10
    
    >>> print(str(price))
    10

    2、 将列表转换为字符串

    >>> print(str([1,3,2]))
    
    [1, 3, 2]

    3、 将字典转换为字符串

    >>> print(str({'name':'liugojun'}))
    
    {'name': 'liugojun'}

    4、 将range函数转换为字符串

    >>> print(str(range(1,10)))
    
    range(1, 10)

    字符串的方法

    (1)、center()方法

    str.center(width[,fillchar]) 

    参数说明:width:指定长度  fillchar:填充字符

    作用:中间对齐,字符串长度小于指定长度,两边使用指定字符填充至指定长度

    举例:

    >>> names = name.center(20,"#")
    
    >>> print(names)
    
    #####liuguojun######

    附加:

    Ⅰ 、ljust(宽度,“符号“)右填充

    str.ljust(width[,fillchar]) 参数说明:width:指定长度  fillchar:填充字符

    作用:左对齐,字符串长度小于指定长度,右边使用指定字符填充至指定长度

    >>> align = name.ljust(20,"#")
    
    >>> print(align)
    
    liuguojun###########

    Ⅱ、rjust(宽度,”符号“)左填充

    >>> print(name.rjust(20,"%"))
    
    %%%%%%%%%%%liuguojun

    Ⅲ 、zfill(宽度)左0填充

    >>> print(name.zfill(20))
    
    00000000000liuguojun

    (2)、find()方法

    作用:在字符串中查找子串,如果查找的子串在字符串之中,返回索引值,如果不在返回-1.

    格式:str.find(‘查找的子串’,起点,终点)

    其中的起点和终点可以不定义

    举例:

    #不设置起点和终点进行查询

    >>> name = 'my name is LiuGuoJun'
    
    >>> name.find("Liu")  
    
    11

    #查找结果不存在返回-1

    >>> name.find('ta')  
    
    -1

     #设置指定的查找范围

    >>> name = "liuguojun"
    
    >>> name.find("liu",1,8)
    
    -1   #索引起始位置为1略过了l,所以找不到
    >>> name.find("liu",0,8)
    
    0

     #字符串find和切片方法结合使用

    #给定一个价格列表
    
    phoneprice = "mate20:4999 xiaomi8:4199 OPPOR17:4299 "
    
    #分析组成结构:由(品牌:价格+“空格”)组成,查找时定义首尾索引,通过切片取值
    
    #定义一个变量由用户输入要查找的关键字
    
    name = input("请输入你要查找的手机品牌:")
    
    #查找到的第一个关键字的索引
    
    index1 = phoneprice.find(name)
    
    #查找第一个关键字结尾(“这里以空格结尾”)
    
    index2 = phoneprice.find(" ",index1)
    
    #知道首尾索引,通过切片取值
    
    price = phoneprice[index1:index2]
    
    print(price)

    附加

    (1)、rfind()如果有多个相同的结果返回最后一个结果索引

    >>> phoneprice  = "mate20:4999 xiaomi8 4199 OPPOR17:4299"
    
    >>> mi = "xiaomi"  #将xiaomi值赋给mi
    
    >>> vivo = "vivo"   #将vivo值赋给vivo
    
    >>> print("rfind mi",phoneprice.rfind(mi))    #反向查找“xiaomi”
    
    rfind mi 12
    
    >>> print("rfind vivo",phoneprice.rfind(vivo))   #反向查找“vivo”
    
    rfind vivo -1

    (2)、Index()返回第一个结果索引,如果结果不存在则返回values错误

    >>> phoneprice  = "mate20:4999 xiaomi8 4199 OPPOR17:4299"
    
    >>> mi = "xiaomi"
    
    >>> vivo = "vivo"
    
    #查找结果不存在则报异常
    
    >>> print("index vivo",phoneprice.index(vivo)) 
    
    Traceback (most recent call last):
    
      File "<pyshell#10>", line 1, in <module>
    
        print("index mi",phoneprice.index(vivo))
    
    ValueError: substring not found
    
    #查找结果存在则返回位置
    
    >>> print("index mi",phoneprice.index(mi))  
    
    index mi 12

     (3)rindex()和index结果相反,返回最后一个

    举例:查找文件类型

    # http://i1.umei.cc/uploads/tu/201711/9999/6e312a86a7.jpg
    
    # 如上可知,文件路径大致结构是图名在最后“.”之前/之后,类型是点之后
    
    #使用r将输入的字符串原格式输出
    
    path = input(r"请输入文件路径:")
    
    #找到最后一个/的位置
    
    index1 = path.rindex("/")
    
    #然后找到最后一个点的位置
    
    index2 = path.rindex(".")
    
    #找到文件名(最后一个/之后,点之前)
    
    name = path[index1+1:index2]
    
    #找到图片类型
    
    imgtype = path[index2:]
    
    #打印文件名和文件类型
    
    print("filename:%s" % name)
    
    print("filetype:%s" % imgtype)

    (4)、count()统计结果出项次数

    >>> phoneprice  = "mate20:4999 xiaomi8 4199 OPPOR17:4299"
    
    >>> mi = "xiaomi"
    
    >>> vivo = "vivo"
    
    >>> print("count mi",phoneprice.count(mi))
    
    count mi 1
    
    >>> print("count vivo",phoneprice.count(vivo))
    
    count vivo 0

    (3)、join()方法

    作用:合并字符串

    格式:connector.join(iterable)  connector是用来连接的连接符,iterable是可迭代对象 

    举例:

    >>> lesson = ['C++','Python','Java']
    
    >>> connector = "/"
    
    >>> print(connector.join(lesson))
    
    C++/Python/Java

    (4)、split()方法

    作用:将字符串拆分为序列

    格式:split(sep,maxsplit)

    说明: sep:指定分割的分隔符(在字符串中)如果没有指定默认使用所有空字符。

    maxsplit:指定分割的数量,默认所有分隔符都切分(因此,列表多只能有maxsplit+1元素)。如果未指定maxsplit或-1,则对拆分 数量没有限制(进行所有可能的拆分)。

    举例:

    >>> tab = "1,2,3,4,5"
    
    >>> print(tab.split("+"))   #指定分隔符不存在,不进行分割
    
    ['1,2,3,4,5']
    
    >>> print(tab.split())   #不指定分隔符,且字符串不是已空格隔离的,不进行分割
    
    ['1,2,3,4,5']
    
    >>> print(tab.split(","))   #指定分割符进行分割
    
    ['1', '2', '3', '4', '5']
    
    >>> print(tab.split(",",-1))   #指定分隔符,最大分割数量为-1,也就是分割全部
    
    ['1', '2', '3', '4', '5']
    
    >>> print(tab.split(",",2))   #指定分隔符,同时指定最大分割数量
    
    ['1', '2', '3,4,5']
    
    如果不指定分隔符,将默认从单个或多个连续的空白符(空格、制表符、换行符等)处进行拆分。

     Join和split、切片方法联合使用

    #题目是:将[1,2,3]转换为123
    
    >>> numbers = [1,2,3]
    
    >>> print(numbers)
    
    [1, 2, 3]
    
    #先将序列转换为字符串
    
    >>> str1 = str(numbers)
    
    >>> print(str1)
    
    [1, 2, 3]
    
    #通过切片的方法,将第一个和最后一个[]符号去掉
    
    >>> str2 = str1[1:-1]
    
    >>> print(str2)
    
    1, 2, 3
    
    #然后通过切分的方法,去掉逗号
    
    >>> str3 = str2.split(",")
    
    >>> print(str3)
    
    ['1', ' 2', ' 3']
    
    #再通过连接的方法将它们连接起来
    
    >>> connector = " "
    
    >>> str4 = connector.join(str3)
    
    >>> print(str4)
    
    1  2  3

    (5)、大小写转换方法

    一、字符全部小写

    str.lower():将字符串中所有大写转换为小写 返回一个字符串的副本,没有参数

    str.islower():检测字符串中所有字符为小写字母 返回true或false

    >>> name = "LiuGuoJun"
    
    >>> names = name.lower()
    
    >>> print(name,names)
    
    LiuGuoJun liuguojun

     二、字符全部大写

    str.upper():将字符串中的小写字母转换为大写字母返回一个字符串的副本,没有参数

    str.isupper():检测字符串中所有字符为大写字母 返回true或false

    >>> name = "liuguojun"
    
    >>> names = name.upper()
    
    >>> print(name,names)
    
    liuguojun LIUGUOJUN

     三、所有单词首字母大写

    str.title():字符串标题化,将每个单词首字母大写,其它小写

    str.istitle():检测字符串中所有单词拼写首字母是否为大写,其它为小写,返回true或false

    >>> name = "liu guo jun"
    
    >>> names = name.title()
    
    >>> print(name,names)
    
    liu guo jun Liu Guo Jun

     四、第一个字母大写

    Capitalize()将字符串第一个字母变为大写,其它字母变为小写。

    格式&用法:str.capitalize()

    Casefold()将所有大写字符转换为小写后生成的字符串

    注释:Python casefold() 方法是Python3.3版本之后引入的,其效果和 lower() 方法非常相似,都可以转换字符串中所有大写字符为小写。

    两者的区别是:lower() 方法只对ASCII编码,也就是‘A-Z’有效,对于其他语言(非汉语或英文)中把大写转换为小写的情况只能用 casefold() 方法。

    >>> name = "liu guo jun"
    
    >>> names = name.capitalize()
    
    >>> print(name,names)
    
    liu guo jun Liu guo jun

     五、大小写转换

    str.swapcase():将字符串中的大小写交换

    >>> name = "liu guo jun"
    
    >>> names = name.swapcase()
    
    >>> print(name,names)
    
    liu guo jun LIU GUO JUN

     六、检测

    str.isalpha():检测字符串中所有字符为字母返回true或false

    str.isdigit():检测字符串中所有字符为数字 返回true或false

    str.isspace():检测字符中所有字符是否为空格 返回true或false

    (6)、replace()方法

    作用:指定子串都替换为另一个字符串,并返回替换后结果

    格式:str.replace(old,new[,count])

    返回值:一个字符窜的副本

    解释:将所有出现的子字符串old替换为new。如果给出了可选参数计数,则只替换第一个计数出现次数old被替换字符串,new:替换后的内容  count:替换个数,默认替换所有

    举例:

    >>> name = "liu,guo,jun,liu,guo,jun"
    
    >>> rename = name.replace("liu","hao")  #没有指定替换个数,默认替换所有
    
    >>> print(rename)
    
    hao,guo,jun,hao,guo,jun
    
    >>> rename = name.replace("liu","hao",1)   #指定了替换个数
    
    >>> print(rename)
    
    hao,guo,jun,liu,guo,jun 

    练习:使用replace将[1,2,3]转换为1 2 3

    思路:首先将列表转换为字符串类型,然后通过切片str2 = str1[1:-1]的方法,将“[]”去掉,去掉之后再使用replace将逗号替换为空格即可。

    (7)、strip()方法

    作用:删除开头和末尾的空白(或指定符号),不包括中间的(最多只能指定一个替换符)

    用法:str.strip()
    >>> '  This       is a    kept     '.strip()
    
    'This       is a    kept'
    
    >>> "%$# thid is #$ quit **".strip('%$#*')
    
    ' thid is #$ quit '

    (8)、translate()方法

    作用:替换字符串的特定部分

    用法:必须与maketrans()方法结合使用,使用时必须创建一个转换表
    
    如:
    >>> table = str.maketrans('cs','kz',' ')  #创建一个转换表
    
    >>> "this is an increadible test".translate(table)          #使用maketrans命令转换
    
    'thizizaninkreadibletezt'

    (9)、startswith()和endswith()方法

    str.startswith(prefix[,start[,end]])
    
    参数说明:prefix:指定字符串.start:起始索引 end:结束索引
    
    解释:
    
    检查字符串是否以指定字符串开头,是返回True,否则返回False。
    
    前缀也可以是要查找的前缀的元组。
    
    使用可选的开始,测试字符串从该位置开始。使用可选的结束,停止比较该位置的字符串。
    str.endswith(suffix[,start[,end]])  
    
    参数说明:suffix:指定字符串,其余同上
    
    解释:
    
    检查字符串是否以指定字符串结尾,如果是返回True如果否则返回false
    
    后缀也可以是一个元组的后缀来寻找。
    
    使用可选的启动,测试从该位置开始。使用可选的结束,停止在该位置的比较

    举例:过滤出所有小米手机

    >>> listphone=['xiaomi8','huaweimeta20','xiaomi5x','xiaomi6x']
    
    #定义for循环,遍历listphone
    
    >>> for i in listphone:
    
    #使用if语句,寻找符合条件的结果
    
             if i.startswith(phone):
    
                      print(i)
    
    xiaomi8
    
    xiaomi5x
    
    xiaomi6x

    (10)、判断字符串是否满足特定的条件

    这些方法都是is开头的,前面附加的函数中有。

    愿你足够勇敢足够努力,足够努力! 愿你想要的明天如约而至!
  • 相关阅读:
    二十一、继承,组合
    Python学习笔记(一):命令行界面扫雷(详细)
    九、Spring Cloud 之旅 -- Config 集群配置中心
    八、Spring Cloud 之旅 -- Zuul 微服务集群网关
    ACM搜索专题(BFS,DFS,记忆化搜索等)
    在Java中使用XPath快速优雅的读取XML, JAXB真的是太繁重
    七、Spring Cloud 之旅 -- Hystrix 微服务保护和容错机制
    记录一次网站信息收集的实战
    编程范式总结
    Java 原生API 实现zip和unzip (用文件和响应流两种方式)
  • 原文地址:https://www.cnblogs.com/liuguojun/p/10679598.html
Copyright © 2011-2022 走看看