Python实现格式化输出的实例详解

2022-08-22 11:00:10
目录
一、format格式输出字符串二、format格式输出字符串实例实例1、网站名称实例2、数值格式化为不同的形式实例3、{}中不设参数实例4、 {}中设参数实例5、str.format() 格式化数字三、%格式化输出实例实例3.1、整数的输出实例3.2、 浮点数输出实例3.3、字符串输出实例3.4、格式化输出用户信息四、完整程序

一、format格式输出字符串

使用>

字符串类型(str)提供了 format() 方法对字符串进行格式化。format() 方法的语法格式如下:

str.format(args)

在该方法中,str 用于指定字符串的显示样式;args 用于指定要进行格式转换的项,如果有多项,之间有逗号进行分割。

在创建显示样式模板时,需要使用{}和:来指定占位符,其完整的语法格式如下:

{ [index][ : [ [fill] align] [sign] [#] [width] [.precision] [type] ] }

格式中用 [] 括起来的参数都是可选参数,即可以使用,也可以不使用。各个参数的含义如下:

    index:指定:后边设置的格式要作用到args中第几个参数值,参数的索引值从 0 开始。如果省略此选项,则会根据 args中参数的先后顺序自动分配。fill:指定空白处填充的字符。注意,当填充字符为逗号(,),且作用于整数或浮点数时,该整数(或浮点数)会以逗号分隔的形式输出,如1000000会输出为1,000,000。align:指定数据的对齐方式,具体的对齐方式如表1所示。

    表 1 align参数及含义

    字符含义
    <数据左对齐
    >数据右对齐
    =数据右对齐,同时将符号放置在填充内容的最左侧,该选项只对数字类型有效
    ^数据居中,此选项需和 width 参数一起使用

    表 2 sign参数以含义

    字符含义
    +正数前加正号,负数前加负号
    -正数前不加正号,负数前加负号
    空格正数前加空格,负数前加负号
    #对于二进制数、八进制数和十六进制数,使用此参数,各进制数前会分别显示 0b、0o、0x前缀;反之则不显示前缀

    表 3 type占位符类型及含义

    字符含义
    s对字符串类型格式化
    d十进制整数
    c将十进制整数自动转换成对应的 Unicode 字符
    e 或者 E转换成科学计数法后,再格式化输出
    g 或 G自动在 e 和 f(或 E 和 F)中切换
    b将十进制数自动转换成二进制表示,再格式化输出
    o将十进制数自动转换成八进制表示,再格式化输出
    x 或者 X将十进制数自动转换成十六进制表示,再格式化输出
    f 或者 F转换为浮点数(默认小数点后保留 6 位),再格式化输出
    %显示百分比(默认显示小数点后 6 位)

    二、format格式输出字符串实例

    实例1、网站名称

    def func1():
        str = "网站名称:{:>20s}\t网址:{:s}"
        print(str.format("Python中文网", "http://www.python-china.com/"))
    
    
    if __name__ == '__main__':
        func1()
    

    输出结果为:

    网站名称:           Python中文网    网址:http://www.python-china.com/

    实例2、数值格式化为不同的形式

    在实际开发中,数值类型有多种显示需求,比如货币形式、百分比形式等,使用>

    def func2():
        # 以货币形式显示
        print("货币形式:{:,d}".format(1000000))
        # 科学计数法表示
        print("科学计数法:{:E}".format(1200.12))
        # 以十六进制表示
        print("100的十六进制:{:#x}".format(100))
        # 输出百分比形式
        print("0.01的百分比表示:{:.0%}".format(0.01))
    
    if __name__ == '__main__':
        # func1()
        func2()
    

    输出结果为:

    货币形式:1,000,000
    科学计数法:1.200120E+03
    100的十六进制:0x64
    0.01的百分比表示:1%

    实例3、{}中不设参数

    def func3():
        print("{} {}".format("hello", "world"))  # 不设置指定位置,按默认顺序
    
        print("{0} {1}".format("hello", "world"))  # 设置指定位置
    
        print("{1} {0} {1}".format("hello", "world"))  # 设置指定位置
    
    if __name__ == '__main__':
        # func1()
        # func2()
        func3()
    

    输出结果为:

    hello world
    hello world
    world hello world

    实例4、>
    def func4():
        # 通过变量设置参数
        print("My name is {name},and I am {age} years old!".format(name="zhangsan", age="25"))
    
        # 通过字典设置参数,需要解包
        info = {"name": "zhangsan", "age": "25"}
        print("My name is {name},and I am {age} years old!".format(**info))
    
        # 通过列表索引设置参数
        msg = ["zhangsan", "25"]
        print("My name is {0[0]},and I am {0[1]} years old!".format(msg))
    
    
    if __name__ == '__main__':
        # func1()
        # func2()
        # func3()
        func4()
    

    输出结果为:

    My name is zhangsan,and I am 25 years old!
    My name is zhangsan,and I am 25 years old!
    My name is zhangsan,and I am 25 years old!

    实例5、str.format()>
    def func5():
        print("{:.2f}".format(3.1415926))  # 保留小数点后两位
    
        print("{:+.2f}".format(3.1415926))  # 带符号保留小数点后两位
    
        print("{:+.2f}".format(-1))  # 带符号保留小数点后两位
    
        print("{:.0f}".format(2.71828))  # 不带小数
    
        print("{:0>2d}".format(5))  # 数字补零 (填充左边, 宽度为2)
    
        print("{:x<4d}".format(5))  # 数字补x (填充右边, 宽度为4)
    
        print("{:x<4d}".format(10))  # 数字补x (填充右边, 宽度为4)
    
        print("{:,}".format(1000000))  # 以逗号分隔的数字格式
    
        print("{:.2%}".format(0.25))  # 百分比格式
    
        print("{:.2e}".format(1000000000))  # 指数记法
    
        print("|{:>10d}|".format(13))  # 右对齐 (默认, 宽度为10)
    
        print("|{:<10d}|".format(13))  # 左对齐 (宽度为10)
    
        print("|{:^10d}|".format(13))  # 中间对齐 (宽度为10)
    
        print("{}今年{{25}}岁了".format("张三"))  # 使用大括号 {} 来转义大括号
    
    
    if __name__ == '__main__':
        # func1()
        # func2()
        # func3()
        # func4()
        func5()

    输出结果为:

    3.14
    +3.14
    -1.00
    3
    05
    5xxx
    10xx
    1,000,000
    25.00%
    1.00e+09
    |        13|
    |13        |
    |    13    |
    张三今年{25}岁了

    Process finished with exit code 0

    三、%格式化输出实例

    实例3.1、整数的输出

    简单提示:

      %o>%d —— dec 十进制(digit )%x —— hex 十六进制
      def func6():
          print('%o' % 20)
          print('%d' % 20)
          print('%x' % 20)
      
      
      if __name__ == '__main__':
          # func1()
          # func2()
          # func3()
          # func4()
          # func5()
          func6()
      

      输出结果为:

      24
      20
      14

      实例3.2、>

      简单提示:

        %f —— float 保留小数点后面六位有效数字%.3f,保留3位小数位%e —— 保留小数点后面六位有效数字,指数形式输出%.3e,保留3位小数位,使用科学计数法%g —— 在保证六位有效数字的前提下,使用小数方式,否则使用科学计数法%.3g,保留3位有效数字,使用小数或科学计数法
        def func7():
            print('%f' % 1.11)  # 默认保留6位小数
        
            print('%.1f' % 1.11)  # 取1位小数
        
            print('%e' % 1.11)  # 默认6位小数,用科学计数法
        
            print('%.3e' % 1.11)  # 取3位小数,用科学计数法
        
            print('%g' % 1111.1111)  # 默认6位有效数字
        
            print('%.7g' % 1111.1111)  # 取7位有效数字
        
            print('%.2g' % 1111.1111)  # 取2位有效数字,自动转换为科学计数法
        
        
        if __name__ == '__main__':
            # func1()
            # func2()
            # func3()
            # func4()
            # func5()
            # func6()
            func7()
        

        输出结果为:

        1.110000
        1.1
        1.110000e+00
        1.110e+00
        1111.11
        1111.111
        1.1e+03

        实例3.3、字符串输出

        简单提示:

          %s>%10s —— 右对齐,占位符10位%-10s —— 左对齐,占位符10位%.2s —— 截取2位字符串%10.2s —— 10位占位符,截取两位字符串
          def func8():
              print('%s' % 'hello world')  # 字符串输出
          
              print('%20s' % 'hello world')  # 右对齐,取20位,不够则补位
          
              print('%-20s' % 'hello world')  # 左对齐,取20位,不够则补位
          
              print('%.2s' % 'hello world')  # 取2位
          
              print('%10.2s' % 'hello world')  # 右对齐,取2位
          
              print('%-10.2s' % 'hello world')  # 左对齐,取2位
          
          
          if __name__ == '__main__':
              # func1()
              # func2()
              # func3()
              # func4()
              # func5()
              # func6()
              # func7()
              func8()
          

          输出结果为:

          hello world
                   hello world
          hello world         
          he
                  he
          he   

          实例3.4、格式化输出用户信息

          编写程序,调查用户的姓名、年龄、职业和薪水,然后格式化输出用户信息,格式如下所示

          ------------info>Name:张三
          Age:24
          Job:计算机
          Salary:52000
          ----------------end---------------

          def func9():
              name = input("Name:")
              age = int(input("Age:"))
              job = input("Job:")
              salary = int(input("Salary:"))
          
              msg = """
              ------------info of %s------------
              Name:%s
              Age:%d
              Job:%s
              Salary:%d
              ----------------end---------------
              """ % (name, name, age, job, salary)
          
              print(msg)
          
          
          if __name__ == '__main__':
              # func1()
              # func2()
              # func3()
              # func4()
              # func5()
              # func6()
              # func7()
              # func8()
              func9()
          

          输出结果为:

          Name:BLACKPINK
          Age:18
          Job:sing
          Salary:6688

              ------------info of BLACKPINK------------
              Name:BLACKPINK
              Age:18
              Job:sing
              Salary:6688
              ----------------end---------------  

          四、完整程序

          def func1():
              str = "网站名称:{:>20s}\t网址:{:s}"
              print(str.format("Python中文网", "http://www.python-china.com/"))
          
          
          def func2():
              # 以货币形式显示
              print("货币形式:{:,d}".format(1000000))
              # 科学计数法表示
              print("科学计数法:{:E}".format(1200.12))
              # 以十六进制表示
              print("100的十六进制:{:#x}".format(100))
              # 输出百分比形式
              print("0.01的百分比表示:{:.0%}".format(0.01))
          
          
          def func3():
              print("{} {}".format("hello", "world"))  # 不设置指定位置,按默认顺序
          
              print("{0} {1}".format("hello", "world"))  # 设置指定位置
          
              print("{1} {0} {1}".format("hello", "world"))  # 设置指定位置
          
          
          def func4():
              # 通过变量设置参数
              print("My name is {name},and I am {age} years old!".format(name="zhangsan", age="25"))
          
              # 通过字典设置参数,需要解包
              info = {"name": "zhangsan", "age": "25"}
              print("My name is {name},and I am {age} years old!".format(**info))
          
              # 通过列表索引设置参数
              msg = ["zhangsan", "25"]
              print("My name is {0[0]},and I am {0[1]} years old!".format(msg))
          
          
          def func5():
              print("{:.2f}".format(3.1415926))  # 保留小数点后两位
          
              print("{:+.2f}".format(3.1415926))  # 带符号保留小数点后两位
          
              print("{:+.2f}".format(-1))  # 带符号保留小数点后两位
          
              print("{:.0f}".format(2.71828))  # 不带小数
          
              print("{:0>2d}".format(5))  # 数字补零 (填充左边, 宽度为2)
          
              print("{:x<4d}".format(5))  # 数字补x (填充右边, 宽度为4)
          
              print("{:x<4d}".format(10))  # 数字补x (填充右边, 宽度为4)
          
              print("{:,}".format(1000000))  # 以逗号分隔的数字格式
          
              print("{:.2%}".format(0.25))  # 百分比格式
          
              print("{:.2e}".format(1000000000))  # 指数记法
          
              print("|{:>10d}|".format(13))  # 右对齐 (默认, 宽度为10)
          
              print("|{:<10d}|".format(13))  # 左对齐 (宽度为10)
          
              print("|{:^10d}|".format(13))  # 中间对齐 (宽度为10)
          
              print("{}今年{{25}}岁了".format("张三"))  # 使用大括号 {} 来转义大括号
          
          
          def func6():
              print('%o' % 20)
              print('%d' % 20)
              print('%x' % 20)
          
          
          def func7():
              print('%f' % 1.11)  # 默认保留6位小数
          
              print('%.1f' % 1.11)  # 取1位小数
          
              print('%e' % 1.11)  # 默认6位小数,用科学计数法
          
              print('%.3e' % 1.11)  # 取3位小数,用科学计数法
          
              print('%g' % 1111.1111)  # 默认6位有效数字
          
              print('%.7g' % 1111.1111)  # 取7位有效数字
          
              print('%.2g' % 1111.1111)  # 取2位有效数字,自动转换为科学计数法
          
          
          def func8():
              print('%s' % 'hello world')  # 字符串输出
          
              print('%20s' % 'hello world')  # 右对齐,取20位,不够则补位
          
              print('%-20s' % 'hello world')  # 左对齐,取20位,不够则补位
          
              print('%.2s' % 'hello world')  # 取2位
          
              print('%10.2s' % 'hello world')  # 右对齐,取2位
          
              print('%-10.2s' % 'hello world')  # 左对齐,取2位
          
          
          def func9():
              name = input("Name:")
              age = int(input("Age:"))
              job = input("Job:")
              salary = int(input("Salary:"))
          
              msg = """
              ------------info of %s------------
              Name:%s
              Age:%d
              Job:%s
              Salary:%d
              ----------------end---------------
              """ % (name, name, age, job, salary)
          
              print(msg)
          
          
          if __name__ == '__main__':
              print("------func1------")
              func1()
              
              print("------func2------")
              func2()
              
              print("------func3------")
              func3()
              
              print("------func4------")
              func4()
              
              print("------func5------")
              func5()
              
              print("------func6------")
              func6()
              
              print("------func7------")
              func7()
              
              print("------func8------")
              func8()
              
              print("------func9------")
              func9()

          输出结果为:

          D:\SoftWare\Python\Anaconda3\envs\spider\python.exe E:/Document/programmLanguageExper/Python/spider/pythonBase/python基础.py
          ------func1------
          网站名称:           Python中文网    网址:http://www.python-china.com/
          ------func2------
          货币形式:1,000,000
          科学计数法:1.200120E+03
          100的十六进制:0x64
          0.01的百分比表示:1%
          ------func3------
          hello world
          hello world
          world hello world
          ------func4------
          My name is zhangsan,and I am 25 years old!
          My name is zhangsan,and I am 25 years old!
          My name is zhangsan,and I am 25 years old!
          ------func5------
          3.14
          +3.14
          -1.00
          3
          05
          5xxx
          10xx
          1,000,000
          25.00%
          1.00e+09
          |        13|
          |13        |
          |    13    |
          张三今年{25}岁了
          ------func6------
          24
          20
          14
          ------func7------
          1.110000
          1.1
          1.110000e+00
          1.110e+00
          1111.11
          1111.111
          1.1e+03
          ------func8------
          hello world
                   hello world
          hello world         
          he
                  he
          he        
          ------func9------
          Name:BLACKPINK
          Age:18
          Job:SING
          Salary:6686

              ------------info of BLACKPINK------------
              Name:BLACKPINK
              Age:18
              Job:SING
              Salary:6686
              ----------------end---------------
              
          Process finished with exit code 0

          以上就是Python实现格式化输出的实例详解的详细内容,更多关于Python格式化输出的资料请关注易采站长站其它相关文章!