Python中的格式化

Python Format

Posted by BlueFat on Monday, August 8, 2022

%运算符

使用字符串模运算符(%)格式化输出: % 运算符也可用于字符串格式化。它将左参数解释为类似于 C 语言字符串中的 printf() 样式格式,以应用于右参数。

# Python program showing how to use
# string modulo operator(%) to print
# fancier output

# print integer and float value
print("Geeks : %2d, Portal : %5.2f" % (1, 05.333))

# print octal value
print("%7.3o" % (25))

# print exponential value
print("%10.3E" % (356.08977))
Geeks :  1, Portal :  5.33
    031
 3.561E+02

在我们的示例中有两个:“%2d”和“%5.2f”。格式占位符的一般语法是:

%[标志][宽度][.精确位数]类型

format( )方法

使用 format 方法格式化输出: 在 Python(2.6) 中添加了 format() 方法。字符串的格式化方法需要更多的人工。用户使用 {} 标记变量将被替换的位置,并且可以提供详细的格式化指令,但用户还需要提供要格式化的信息。此方法允许我们通过位置格式连接输出中的元素。

代码1 { }

# Python program showing
# use of format() method
 
# using format() method
print('I love {} for "{}!"'.format('Geeks', 'Geeks'))
 
# using format() method and referring
# a position of the object
print('{0} and {1}'.format('Geeks', 'Portal'))
 
print('{1} and {0}'.format('Geeks', 'Portal'))
 
# the above formatting can also be done by using f-Strings
# Although, this features work only with python 3.6 or above.
 
print(f"I love {'Geeks'} for \"{'Geeks'}!\"")
 
# using format() method and referring
# a position of the object
print(f"{'Geeks'} and {'Portal'}")
I love Geeks for "Geeks!"
Geeks and Portal
Portal and Geeks
I love Geeks for "Geeks!"
Geeks and Portal

其中的括号和字符(称为格式字段)被传递给 format() 方法的对象替换。括号中的数字可用于表示传递给 format() 方法的对象的位置。

代码2 {0:2d}

使用 .format() 方法的浮点精度:

语法: {[index]:[width][.precision][type]}
  • d 表示整数
  • f 表示浮点数
  • b 表示二进制数
  • o 表示八进制数
  • x 表示八进制十六进制数
  • s 表示字符串
  • e 表示指数格式的浮点数
# Python program showing
# a use of format() method

# combining positional and keyword arguments
print('Number one portal is {0}, {1}, and {other}.'
	.format('Geeks', 'For', other ='Geeks'))

# using format() method with number
print("Geeks: {0:2d}, Portal: {1:8.2f}".
	format(12, 00.546))

# Changing positional argument
print("Second argument: {1:3d}, first one: {0:7.2f}".
	format(47.42, 11))

print("Geeks: {a:5d}, Portal: {p:8.2f}".
	format(a = 453, p = 59.058))
Number one portal is Geeks, For, and Geeks.
Geeks: 12, Portal:    0.55
Second argument:  11, first one:   47.42
Geeks:   453, Portal:    59.06

下图的示例用法描述了 format 方法如何用于位置参数:

代码3 字典

# Python program to
# show format() is
# used in dictionary

tab = {'geeks': 4127, 'for': 4098, 'geek': 8637678}

# using format() in dictionary
print('Geeks: {0[geeks]:d}; For: {0[for]:d}; '
	'Geeks: {0[geek]:d}'.format(tab))

data = dict(fun ="GeeksForGeeks", adj ="Portal")

# using format() in dictionary
print("I love {fun} computer {adj}".format(**data))
Geeks: 4127; For: 4098; Geeks: 8637678
I love GeeksForGeeks computer Portal

f 字符串

PEP 498 引入了一种新的字符串格式化机制,称为文字字符串插值或更常见的F 字符串(因为字符串文字前面的前导 f 字符)。f-strings 背后的想法是使字符串插值更简单。

要创建 f 字符串,请在字符串前面加上字母“ f ”。字符串本身的格式化方式与使用 str.format() 的方式大致相同。F-strings 提供了一种简洁方便的方式来将 python 表达式嵌入到字符串文字中以进行格式化。

使用 f 字符串格式化字符串

name = 'Ele'
print(f"My name is {name}.")
My name is Ele

使用 f 字符串的算术运算

a = 5
b = 10
print(f"He said his age is {2 * (a + b)}.")
He said his age is 30.

使用 f 字符串的 Lambda 表达式

print(f"He said his age is {(lambda x: x*2)(3)}")
He said his age is 30.

使用 f 字符串的浮点精度

f-String 方法中的浮点精度:

语法: {value:{width}.{precision}}
num = 3.14159
print(f"The valueof pi is: {num:{1}.{5}}")
The valueof pi is: 3.1416

哪种字符串格式化方法最好?

f-strings比% -formatting和str.format()更快更好。f-strings 表达式在运行时进行评估,我们也可以使用非常简单易用的语法将表达式嵌入到 f-string 中。大括号内的表达式在运行时计算,然后与 f 字符串的字符串部分放在一起,然后返回最终字符串。

注意:如果您使用的是 Python 3.6+,请使用 f-Strings,如果不是,请使用 .format() 方法。

字符串美化

使用字符串方法格式化输出: 此输出通过使用字符串切片和连接操作进行格式化。字符串类型有一些方法可以帮助以更奇特的方式格式化输出。一些有助于格式化输出的方法是str.ljust()str.rjust()str.centre()

# Python program to
# format a output using
# string() method

cstr = "I love geeksforgeeks"

# Printing the center aligned
# string with fillchr
print ("Center aligned string with fillchr: ")
print (cstr.center(40, '#'))

# Printing the left aligned
# string with "-" padding
print ("The left aligned string is : ")
print (cstr.ljust(40, '-'))

# Printing the right aligned string
# with "-" padding
print ("The right aligned string is : ")
print (cstr.rjust(40, '-'))
Center aligned string with fillchr: 
##########I love geeksforgeeks##########
The left aligned string is : 
I love geeksforgeeks--------------------
The right aligned string is : 
--------------------I love geeksforgeeks

其他

时间格式

d1=datetime.datetime.now( )
>>> print(d1)
2022-08-07 13:14:31.074267
>>> d1
datetime.datetime(2022, 8, 7, 13, 14, 31, 74267)
print("{:%Y %y %m %d %H %M %S}".format(d1))
2022 22 08 07 13 14 31
>>> print("{}*{}={:3}".format(5,6,5*6))
5*6= 30
>>> print("{0}*{1}={2:3}".format(5,6,5*6))
5*6= 30
>>> print("{0}*{1}={2:#>3}".format(5,6,5*6))
5*6=#30
>>> print("{}*{}={:#<3}".format(5,6,5*6))   #左对应 #填充
5*6=30#
>>> print("{}*{}={:#>3}".format(5,6,5*6))  #右对应 #填充
5*6=#30
>>> print("{:#^7}".format('*'*3)) #中间对应  #填充
##***##
>>> print("{}:{}".format('127.0.0.1',8080))
127.0.0.1:8080

print("{server} {1}:{0}".format(8080,"127.0.0.1",server="web"))

#访问元组元素
>>> print("{0[0]}.{0[1]}".format(('x1','x3')))
x1.x3

>>> print("{0:d} {0:b} {0:o} {0:#X}".format(31))
31 11111 37 0X1F

>>> print("%3.2f%% 0x%x %#X" %(89.7654,10,254))
89.77% 0xa 0XFE

>>> "im %03d" %(20,)
'im 020'

>>> 'i %s' %'Python'
'i Python

>>> "im %-5d" %(20,)
'im 20   '

https://www.geeksforgeeks.org/python-output-formatting/