Python格式化字符串常用的几种方法

“ + ”拼接

a = 'hello '
b = 'world'
c = a + b
print(c)

>>
hello world

在使用+运算符来进行字符串拼接的时候,只能是字符串和字符串进行拼接,无法和整形(int)、浮点型(float)以及布尔型(bool)进行拼接。

% 格式化输出(占位符格式化)

  • %s :字符串的格式化; %xs 表示右对齐,占x位。%-xs表示左对齐,占x位

    n='hello word'
    print('%s'% n)
    
    >> hello word
    
    n='hello word'
    print('%14s'%n)
    
    >>     hello word
    
  • %d :格式化整数,可以定义格式化的对齐方法,正数表示左对齐,负数表示右对齐。且可以使用任意的字符进行位数的填充。比如 %06d 就表示 这个数占六位且左对齐 如果不足六位就用0填充,当然0也可以换成其他的字符;如果足六位或大于六位 则正常输出数字。

    d = 1000
    print('%06d'%d)
    
    >> 001000
    
  • %c :格式化字符及ASCII码

    d = 97
    print('%c'% d)
    
    >> a
    
    ### %c 是将 ASCII码格式化 对应的值,而不是把对应的值格式化成ASCII码
    d = 'a'
    print('%c'% d)
    
    >> a
    
  • %f :格式化浮点数,可以指定小数后面的精度 %.xf,表示保留小数点后x位,默认是小数点6位。若不足x位(或者不指定x时且不足6位时),则补零。

    d = 111.333445
    print('%.2f'% d)
    
    >> 111.33
    
    d = 111.333445
    print('%.8f'% d)
    
    >> 111.33344500
    
    ## python3中 %f 和 %.f 是一样的效果
    d = 111.333445
    print('%8f'% d)
    
    >> 111.33344500
    
    ## 不足6位 补零
    d = 111.33
    print('%3f'% d)
    
    >> 111.330000
    
  • %o :格式化无符号八进制数

  • %x :格式化无符号十六进制数

    在表示八进制或者十六进制时想显示各进制的前缀时,在%后面加一个#

    n=12
    print('%d:%o'%(n,n))		# 8进制
    print('%d:%x'%(n,n))		# 16进制
    print('%d:%#o'%(n,n))
    print('%d:%#x'%(n,n))
    
    >> 12:14
    >> 12:c
    >> 12:014
    >> 12:0xc
    
  • %e : 将整数、浮点数转换成科学计数法

    n=12
    print('%d:%e'%(n,n))
    
    >> 12:1.200000e+01
    
  • %%: 当字符串中存在格式化标志时,需要用 %%表示一个百分号

    n=12
    print('%d%%'%n)
    
    >> 12%
    

str.format

用于格式化字符串的常用的函数。其可以接收不限制数量的参数。各个参数的位置和参数的形式都是可以指定的。同时也还可以按照关键词参数的形式设置参数值。

  • 普通形式
## 不指定顺序,按照默认的顺序
print("{} {}".format("hello", "world")) 
print("{} {}".format("world", "hello")) 

>> hello world
>> world hello
  • 指定顺序
print("{0} {1}".format("hello", "world"))  
print( "{1} {0} {1}".format("world", "hello"))  

>> hello world
>> hello world hello
  • 指定参数形式
## 列表形式 ##
list1 = ['xbox', 'sony']
list2 = ['xgp', 'sgp']
print("{0[0]}, {0[1]}".format(list1))  # 前面的list的编号是必须的
print("{0[0]}, {1[1]}".format(list1,list2))  # 前面的list的编号是必须的

>> xbox, sony
>> xbox, sgp

## 字典形式 ##
map = {'name': 'xbox', 'class': 'xgp'} 
print("{name}, {class}".format(**map))  ## 解包参数

>> xbox, xgp

## 参数自设置 --> 和字典形式的参数一致,只不过字典形式的参数是通过解包参数 ** 进行解包在传递
print("{name}, {class}".format(name='xbox', class='xgp'))  

>> xbox, xgp

除了普通的参数外,str.format()还可以传递对象。将类实例对象传入,然后可以输出实例对象的属性(类参数或者成员参数)。

class fun(object):
    def __init__(self, value):
        self.value = value

age = fun(18)
## 0表示format中的第一个对象 
print('Age is: {0.value}'.format(age))

>> Age is: 18

结合格式化输出,str.format() 也可以进行输出的精度设置,且能显示不同进制的数值。在 { : } 中 : 后面的就表示 这个整数,小数,字符串 的位数。

print("{:.2f}".format(3.141)) #保留小数点后两位
print("{:+.2f}".format(3.141)) #带符号(正数显示 “+”,负数显示 “-”)保留小数点后两位
print("{:.0f}".format(3.141)) #不带小数
>> 3.14
>> +3.14
>> 3

print('{:b}'.format(12))		# 二进制
print('{:d}'.format(12))		# 十进制
print('{:o}'.format(12))		# 八进制
print('{:x}'.format(12))		# 十六进制
>> 1100
>> 12
>> 14
>> c

还有一些特殊的形式

print('{{12}},{}'.format(12))	## 双层{{}} 用来转义 {}	
>> {12},12
print("{:,}".format(100000)) #以逗号分隔的数字
>> 100,000
print("{:.2%}".format(0.1234)) #百分比格式且保留2位小数
>> 12.34%
print("{:.2e}".format(0.1234)) #指数记法且保留2位小数
>> 1.23e-01

f-string

基本形式: f'{ }' 或者 F'{ }'; 其余的特性和str.format() 类似。

fruit='apples'
number=1
price=2.4
print(f'{number:5d} {fruit:8}, price:{price*number:.5f}')

>> 6 apples,  proce:2.40000
posted @ 2022-06-24 09:15  jacknie23  阅读(1439)  评论(0编辑  收藏  举报