Python 程序设计入门(019)——深度解析字符串的 format() 方法

Python 程序设计入门(019)—— 字符串的 format() 方法详解

目录

  • Python 程序设计入门(019)—— 字符串的 format() 方法详解
  • 一、format() 方法的基本格式
  • 二、format() 方法的用法
  • 1、按照先后顺序替换
  • 2、按照索引进行匹配替换
  • 3、按关键字索引进行匹配替换
  • 4、通过列表索引格式化字符串
  • 5、通过字典设置格式化字符串
  • 6、混合使用
  • 三、格式化字符串
  • 1、左对齐及填充格式化字符串
  • 2、右对齐及填充格式化字符串
  • 3、居中对齐及填充格式化字符串
  • 四、format() 方法综合应用
  • 一、format() 方法的基本格式

    字符串的 format() 方法用于对字符串进行格式化操作。format() 方法功能非常强大,格式比较复杂,语法格式如下:

    常量{参数序列:格式控制标记}常量{参数序列:格式控制标记}.format(*args, **kwargs)
    

    说明:

    (1)参数序号为传入的参数,格式设置模板是一个由字符串和格式控制说明字符组成的字符串,用来对传入的参数进行格式设置。格式设置模板用 {} 表示,可以有多个,其对应 format() 方法中逗号分隔的参数。

    (2)常量可以是符号、文字,根据程序开发需要进行设置。

    (3)位置参数可以为一个、两个或更多,其对应的索引序号可以和位置索引一一对应。当索引序号和格式设置标记均为空值时,其实就是直接连接位置参数的字符串。

    例如:

    print("小明的生日为:{}年{}月{}日".format(2004,12,5))
    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    小明的生日为:2004年12月5日
    

    二、format() 方法的用法

    1、按照先后顺序替换

    格式如下:

    "{} {}".format(values1, values2)
    

    说明:format 会把参数按位置顺序来填充到字符串中,按照顺序自动分配,而且一个参数可以多次插入。{{}} 仅代表{},不占用字符串格式化位置顺序。

    例如:

    #  {} 和参数的个数必须匹配,否则会报错。
    name = "王涛"
    age = 25
    print("我叫{},今年{}岁了。".format(name,age))
    print("Address:{}{}{},{}。".format("河南省","新乡市","红旗区","河南科技学院"))
    print("{}{{}}{}{{}}{}".format("河南省","新乡市","红旗区"))
    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    我叫王涛,今年25岁了。
    Address:河南省新乡市红旗区,河南科技学院。
    河南省{}新乡市{}红旗区
    
    2、按照索引进行匹配替换

    格式如下:

    "{0} {1}".format(value1, value2)
    
    说明:按索引编号来匹配替换 {索引} 的值。
    

    例如:

    name = "王涛"
    age = 25
    year = 2002
    month = 10
    day = 22
    prov = "河南省"
    city1 = "新乡市"
    city2 = "郑州市"
    print("我叫{0},今年{1}岁了。".format(name,age))
    print("李明的生日:{0}-{1}-{2}".format(year,month,day))
    print("李明的生日:{1}-{2}-{0}".format(year,month,day))
    print("{0}的地址:{1}{2};李明的地址:{1}{3}".format(name,prov,city1,city2))
    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    我叫王涛,今年25岁了。
    李明的生日:2002-10-22
    李明的生日:10-22-2002
    王涛的地址:河南省新乡市;李明的地址:河南省郑州市
    
    3、按关键字索引进行匹配替换

    格式如下:

    "{关键字索引1} {关键字索引2}".format(关键字索引1 = value1, 关键字索引2 = value2)
    

    例如:

    name1 = "王涛"
    age1 = 25
    year1 = 2002
    month1 = 10
    day1 = 22
    print("我叫{name},今年{age}岁了。".format(name=name1,age=age1))
    print("我叫{name},今年{age}岁了。".format(age=age1,name=name1))
    print("李明的生日:{year}-{month}-{day}".format(day=day1,month=month1,year=year1))
    print("李明的生日:{month}-{day}-{year}".format(day=day1,month=month1,year=year1))
    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    我叫王涛,今年25岁了。
    我叫王涛,今年25岁了。
    李明的生日:2002-10-22
    李明的生日:10-22-2002
    
    4、通过列表索引格式化字符串

    格式如下:

    列表名=['列表值1','列表值2','列表值3'...]
    "{List[列表索引1]},{List[列表索引2]}".format(List = 列表名)
    
    说明:在format格式化时,可使用 * 对list拆分
    

    例如:

    list1 = ["王涛",25]
    list2 = [2002,10,22]
    list3 = ["Tom","Jerry","Rose","Black"]
    list4 = [25,22,20,24]
    print("我叫{list[0]},今年{list[1]}岁了。".format(list=list1))
    print("我叫{0[0]},今年{0[1]}岁了。".format(list1))
    print("李明的生日:{list[0]}-{list[1]}-{list[2]}".format(list=list2))
    print("李明的生日:{list[1]}-{list[2]}-{list[0]}".format(list=list2))
    print("李明的生日:{0[1]}-{0[2]}-{0[0]}".format(list2))
    print("{0[0]}的年龄为{1[1]};{0[1]}的年龄为{1[2]};{0[2]}的年龄为{1[0]};{0[3]}的年龄为{1[3]}。".format(list3,list4))
    
    # 使用 *与** 对list进行拆分
    print("李明的生日:{1}-{2}-{0}".format(*list2))
    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    我叫王涛,今年25岁了。
    我叫王涛,今年25岁了。
    李明的生日:2002-10-22
    李明的生日:10-22-2002
    李明的生日:10-22-2002
    Tom的年龄为22;Jerry的年龄为20;Rose的年龄为25;Black的年龄为24。
    李明的生日:10-22-2002
    
    5、通过字典设置格式化字符串

    格式如下:

    字典名1={'字典索引1':'字典索引1的值', '字典索引2':'字典索引2的值', ...}
    "{字典索引},{字典索引值}".format(字典名1) 
    
    说明:在format格式化时,可使用 ** 对字典拆分
    

    例如:

    dict1 = {"name":"王涛","age":21}
    dict2 = {"year":2002,"month":10,"day":22}
    print("我叫{0[name]},今年{0[age]}岁了。".format(dict1))
    print("我叫{0},今年{1}岁了。".format(*dict1))
    print("李明的生日:{0[year]}-{0[month]}-{0[day]}".format(dict2))
    print("李明的生日:{0[month]}-{0[day]}-{0[year]}".format(dict2))
    print("我叫{name},今年{age}岁了。生日:{year}-{month}-{day}".format(**dict1,**dict2))
    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    我叫王涛,今年21岁了。
    我叫name,今年age岁了。
    李明的生日:2002-10-22
    李明的生日:10-22-2002
    我叫王涛,今年21岁了。生日:2002-10-22
    
    6、混合使用

    (1)可以通过索引,参数名来混合匹配。

    (2)注意:命名参数必须放在最后。否则编译时出现报错!

    (3)索引和默认格式化不可以混合使用。

    (4)支持对参数部分引用,可以通过索引对参数的部分进行取值。

    例如:

    list1 = ["王涛",21]
    dict1 = {"year":2002,"month":10,"day":22}
    print("我叫{},生日为:{year}-{month}-{day},今年{}岁了。".format(*list1,**dict1))
    print("我叫{},今年{age}岁了。".format("刘鹏",age=25))
    # print("我叫{},今年{age}岁了。".format(age=25,"刘鹏")) #此代码错误,命名参数必须放在最后
    print("我叫{},今年{1}岁了。".format("刘鹏",25))  #此代码错误,索引和默认格式化不可以混合使用
    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    我叫王涛,生日为:2002-10-22,今年21岁了。
    我叫刘鹏,今年25岁了。
    Traceback (most recent call last):
      File "C:\Python\Python38\First.py", line 6, in <module>
        print("我叫{},今年{1}岁了。".format("刘鹏",25))
    ValueError: cannot switch from automatic field numbering to manual field specification
    

    三、格式化字符串

    1、左对齐及填充格式化字符串

    格式如下:

    :<      # 左对齐填充
    <       # 左对齐,后面带宽度
    :       # 后面带填充的字符,只能是一个字符,不指定则默认是用空格填充
    

    例如:

    print('{:<10}!'.format('China'))   # 默认填充空格
    print('{:0<10}!'.format('China'))  # 用0填充
    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    China     !
    China00000!
    

    综合应用:

    products=[["苹果",16.88],["香蕉",22.56],["西瓜",30.2],["西红柿",4.99]]
    print("=="*5+"商品列表"+"=="*5)
    i=1
    for product in products:
        print('{:0<6}\t{:<10}\t{:<10.1f}'.format(i, product[0], product[1]))
        i = i+1
        
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    ==========商品列表==========
    100000	苹果        	16.9      
    200000	香蕉        	22.6      
    300000	西瓜        	30.2      
    400000	西红柿       	5.0 
    
    2、右对齐及填充格式化字符串

    格式如下:

    :>  # 右对齐
    >   # 右对齐,后面带宽度,
    :   # 后面带填充的字符,只能是一个字符,不指定则默认是用空格填充
    

    例如:

    print('国家:{:>10}!'.format('China'))   # 默认填充空格
    print('国家:{:0>10}!'.format('China'))  # 用0填充
    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    国家:     China!
    国家:00000China!
    

    综合应用:

    products=[["苹果",16.88],["香蕉",22.56],["西瓜",30.2],["西红柿",4.99]]
    print("=="*5+"商品列表"+"=="*5)
    i=1
    for product in products:
        print('{:0>6}\t{:<10}\t{:>10.1f}元'.format(i, product[0], product[1]))
        i = i+1
            
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    ==========商品列表==========
    000001	苹果        	      16.9元
    000002	香蕉        	      22.6元
    000003	西瓜        	      30.2元
    000004	西红柿       	       5.0元
    
    3、居中对齐及填充格式化字符串

    格式如下:

    :^   # 居中对齐
    ^    # 居中对齐,后面带宽度
    :    # 后面带填充的字符,只能是一个字符,不指定则默认是用空格填充
    

    例如:

    print('国家:{:^10}!'.format('China'))   # 默认填充空格
    print('国家:{:0^10}!'.format('China'))  # 用0填充
            
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    国家:  China   !
    国家:00China000!
    

    综合应用:

    products=[["苹果",16.88],["香蕉",22.56],["西瓜",30.2],["西红柿",4.99]]
    print("=="*5+"商品列表"+"=="*5)
    i=1
    for product in products:
        print('{:0>6}\t{:^10}\t{:>10.1f}元'.format(i, product[0], product[1]))
        i = i+1
                
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    ==========商品列表==========
    000001	    苹果    	      16.9元
    000002	    香蕉    	      22.6元
    000003	    西瓜    	      30.2元
    000004	   西红柿    	       5.0元
    

    四、format() 方法综合应用

    (1)打印左对齐图案

    代码如下:

    for i in range(1, 11):
        print("{:<{}}".format("*" * i, 10))
                    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
    *         
    **        
    ***       
    ****      
    *****     
    ******    
    *******   
    ********  
    ********* 
    **********
    

    (2)打印右对齐图案

    代码如下:

    for i in range(1, 11):
        print("{:>{}}".format("*" * i, 10))
                    
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
             *
            **
           ***
          ****
         *****
        ******
       *******
      ********
     *********
    **********
    

    (3)打印居中对齐图案

    代码如下:

    for i in range(1, 21, 2):
        print("{:^{}}".format("*" * i, 20))
                        
    程序运行结果为:
    ===================== RESTART: C:\Python\Python38\First.py =====================
             *          
            ***         
           *****        
          *******       
         *********      
        ***********     
       *************    
      ***************   
     *****************  
    ******************* 
    

    作者:睿思达DBA_WGX

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python 程序设计入门(019)——深度解析字符串的 format() 方法

    发表回复