zoukankan      html  css  js  c++  java
  • python学习笔记4:格式化字符串

    1. 使用%

    %的常用转换类型

    转换 说明 示例
    d,i 整型 '%i'%(4.3) 返回'4'
    u 无符号整型
    f 浮点型, m.dddd '%5.3f'%(1/3) 返回'0.333'
    e 浮点型, m.dddde+/-xx '%5.3e'%(1/3) 返回'3.333e-01'
    E 浮点型, m.ddddE+/-xx '%5.3E'%(1/3) 返回'3.333E-01'
    g
    c char, 单字符 '%c'%(78), 返回'N'
    s str或能用str()转换的数据 '%s'%(1/3), 返回'0.3333333333333333'
    % 输入一个% '30%%'%(), 返回'30%'

    1.1. 对整数指定宽度

    >>> n = 5
    >>> s = '%8d'%(n)# '5',默认为右对齐;
    >>> s = '%08d'%(n)# '00000005',前面补0;
    >>> s = '%-8d'%(n)# '5', 使用负号,左对齐;
    

    1.2. 通过变量指定宽度

    >>> w = 8
    >>> n = 5
    >>> s = '%*d'%(w, n)# '5',默认右对齐;
    >>> s = '%0*d'%(w, n) # '00000005',前面补0;
    >>> s = '%-*d'%(w, n) # '5',左对齐;
    

    1.3. 对小数指定宽度

    只指定总宽度

    >>> n = 3.1415926 # 整数部分1位,小数部分7位
    >>> '%5f'%(n) # '3.141593' n长度超过5,所以不舍去bit,但为什么最后的6被四舍五入了?
    >>> '%6f'%(n) # '3.141593' n长度超过6,所以不舍去bit,但为什么最后的6被四舍五入了?
    >>> '%7f'%(n) # '3.141593' n长度超过7,所以不舍去bit,但为什么最后的6被四舍五入了?
    >>> '%8f'%(n) # ' 3.141593' 整数部分2bit,小数部分6bit,共8bit;
    

    指定总宽度和小数宽度

    >>> n = 3.1415926 # 整数部分1位,小数部分7位
    >>> '%5.0f'%(n) # '3',共5bit, 小数部分0bit,整数部分5bit,小数点0bit;
    >>> '%5.1f'%(n) # '3.1',共5bit, 小数部分1bit,整数部分3bit,小数点1bit;
    >>> '%5.3f'%(n) # '3.142',共5bit, 小数部分3bit,整数部分1bit,小数点1bit;
    >>> '%5.4f'%(n) # '3.1416' 小数部分4bit,整数部分1bit,小数点1bit,超过了5bit,实际共6bit,相当于'%6.4f'%(n);
    >>> '%5.5f'%(n) # '3.14159' 小数部分5bit,整数部分1bit,小数点1bit,超过了5bit,实际共7bit,相当于'%7.5f'%(n);
    >>> '%05.1f'%(n) # '003.1' 小数部分1bit,整数部分3bit,小数点1bit,共5bit;
    

    1.4. 通过变量指定总宽度和小数宽度

    >>> w_all = 5
    >>> w_frac = 1
    >>> '%0*.*f'%(w_all, w_frac, n) # '003.1' 小数部分1bit,整数部分3bit,小数点1bit,共5bit;
    

    2. 使用format

    format是python2.6后增加的功能

    2.1. 通过位置映射

    >>> '{} and {}'.format('hello', 'world') # 'hello and world' ,不指定位置,按默认顺序;
    >>> '{0} and {1} or {0}'.format('hello', 'world') # 'hello and world or hello' ,指定位置,位置可以重复使用;
    

    2.2. 通过key映射

    >>> '{name} is {age} years old'.format(age=18, name='Jim') # 'Jim is 18 years old'
    

    2.3. 通过下标映射

    >>> list_info = ['Jim', 18]
    >>> '{0[0]} is {0[1]} years old'.format(list_info) # 'Jim is 18 years old'
    >>> '{list_arg[0]} is {list_arg[1]} years old'.format(list_arg=list_info) # 'Jim is 18 years old'
    

    2.4. 填充与对齐

    语法: {:[填充符][对齐方式][宽度]}
    对齐方式:'^'表示居中,'<'表示左对齐,'>'表示右对齐;
    宽度: 通过数字或变量指定;

    >>> '{s0:<10}'.format(s0='abcd') #左对齐  
    'abcd      '  
    >>> '{s0:^10}'.format(s0='abcd') #居中对齐  
    '   abcd   '  
    >>> '{s0:>10}'.format(s0='abcd') #右对齐  
    '      abcd'  
    >>> '{s0:0>10}'.format(s0='abcd') #不足补0    
    '000000abcd'  
    >>> '{s0:x^10}'.format(s0='abcd') #不足补x  
    'xxxabcdxxx'  
    >>> '{s0:x^{w}}'.format(s0='abcd', w=10) #通过变量指定宽度  
    'xxxabcdxxx'  
    >>> '{s0:{t}^{w}}'.format(s0='abcd',t='x', w=10) #通过变量指定填充字符, 好像只支持一个字符  
    'xxxabcdxxx'  
    >>> '{s0:{t}{d}{w}}'.format(s0='abcd',t='x', d='^', w=10) #通过变量指定对齐方式  
    'xxxabcdxxx'  
    out
    

    2.5. 指定小数部分宽度

    >>> '{:.3f}'.format(0.123456)# '0.123',.3f表示小数部分占3bit;
    >>> '{:7.3f}'.format(0.123456) # '[ ][ ]0.123',7.3f表示小数部分占3bit,字符总宽度7bit;
    >>> '{n:{w_all}.{w_frac}f}'.format(m=0.123456, w_all=7, w_frac=3) # '[ ][ ]0.123',通过变量指定宽度;
    

    2.6. 添加千分位分隔符

    >>> '{:,}'.format(1234567.89123) # 1,234,567.89123 , ':,'表示添加千分位分隔符;
    
  • 相关阅读:
    make_blobs(源码)
    odoo13
    Odoo Community & Enterprise | & 我的一些瞎扯。。
    odoo 应用笔记 01 [草稿]
    PVE 为虚拟机 直通硬盘
    freebsd 断电 单用户模式恢复
    odoo 绿色版
    WSL 手动下载安装
    Command pg_dump not found
    odoo性能优化
  • 原文地址:https://www.cnblogs.com/gaiqingfeng/p/13228951.html
Copyright © 2011-2022 走看看