[Python]_[初级]_[字符串格式化的三种方法]
Posted infoworld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python]_[初级]_[字符串格式化的三种方法]相关的知识,希望对你有一定的参考价值。
场景
-
在开发网络应用的时候,会用到
URL
的一些拼接替换处理。比如某个链接的部分需要替换为其他内容,其他部分保持不变,那么有没有快捷的字符串模板替换库呢? -
在阅读第三方代码时,会看到
f"xxxx1"
这类的字符串,这是什么语法?
说明
-
最常用的是
print
风格的格式化字符串,如print('%s,%s %s' % ("Hi,", "Hello", "World"))
。 这种格式化风格是最早的字符串格式化方式,这种方式有它自己的特点:- 如参数列表必须一一对应
%
声明顺序。 - 有多少个
%
就必须有多少个值,值不能重用。 比如str.format()
格式化可以支持值重用"1,0,1".format(1,2)
, 或者f"name.value.name"
- 不支持对象格式化,比如
datetime
对象。 - 数值不支持格式化为二进制格式。
- 如参数列表必须一一对应
-
最新的字面常亮
f""
格式化就是str.format()
的简化版,具备它大多数的格式语法。最常见的就是命名参数格式化。
name = "Tobey"
line = f"My name is name or name!s or name!r or repr(name)"
print(line)
f""
和str.format()
支持数值二进制输出.
number = 1024
line = f"number:#0x" # 0x400
print(line)
line = f"number:b" # 10000000000
- 输出时间格式等[3]。
today = datetime(year=2023, month=2, day=1)
line = f"today:%Y%m%d" # 20230201
print(line)
例子
- 这里有三种字符串格式方法, 详细的使用方式看例子.
import decimal
from datetime import datetime
def TestPrecentSignFormat():
print("==== TestPrecentSignFormat BEGIN ====")
line = '%s,%s %s' % ("Hi,", "Hello", "World")
print(line)
line = "%s" % "https://blog.csdn.net/infoworld"
print(line)
number = 1037
line = "hex is %x or %X" % (number,number)
print(line)
line = "Decimal is %d" % number
print(line)
line = "Float is %03.2f" % number
print(line)
print("==== TestPrecentSignFormat END ====")
def TestStringFormat():
print("==== TestStringFormat BEGIN ====")
# 使用n来表示第n个参数,n是数值
line = "1,2,0".format(0,1,2) # 1,2,0
print(line)
# 如果不使用序号,那么代表着顺序
line = ",,".format(0,1,2) # 0,1,2
print(line)
# *符号表示解包参数序列
line = "1,2,0".format(*[11,22,33])
print(line)
# 所有f""可以使用的语法都可以使用, 对象格式化需要加:xxx格式
today = datetime(year=2023, month=2, day=1)
line = ":%Y%m%d".format(today) # 20230201
print(line)
# 数值格式化
number = 1023.2023
line = ":03.2f".format(number)
print(line)
# 自定义参数名
line = 'Coordinates: latitude, longitude'.format(latitude='37.24N', longitude='-115.81W')
print(line)
print("==== TestStringFormat END ====")
def TestFormatStringLiterals():
print("==== TestFormatStringLiterals BEGIN ====")
# 字符串字面常亮格式化使用str.format()方法来格式化。
# 作为模板变量
# 在3.6版本以后支持
name = "Tobey"
# !s相当于str(), !r相当于repr()
line = f"My name is name or name!s or name!r or repr(name)"
print(line)
# 格式化数据类型,使用:符号
precision = 5 # 精度是5位
value = decimal.Decimal("12.34567")
print(value)
line = f"result: value:precision"
print(line)
line = f"value:03.3f"
print(line)
# 格式化输出日期字符串
today = datetime(year=2023, month=2, day=1)
line = f"today:%Y%m%d" # 20230201
print(line)
# 数值数值的十六进制
number = 1024
line = f"number:#0x" # 0x400
print(line)
line = f"number:b" # 10000000000
print(line)
# object, 字符串里如果是引用属性,不要使用"双引号
o1 = "name": "product.id","value": 23
line = f"Json name is o1['name']"
print(line)
# 输出大括号本身
line = f" \\" and "
print(line)
print("==== TestFormatStringLiterals END ====")
if __name__ == '__main__':
print("hello world!")
TestPrecentSignFormat()
TestStringFormat()
TestFormatStringLiterals()
输出
hello world!
==== TestPrecentSignFormat BEGIN ====
Hi,,Hello World
https://blog.csdn.net/infoworld
hex is 40d or 40D
Decimal is 1037
Float is 1037.00
==== TestPrecentSignFormat END ====
==== TestStringFormat BEGIN ====
1,2,0
0,1,2
22,33,11
20230201
1023.20
Coordinates: 37.24N, -115.81W
==== TestStringFormat END ====
==== TestFormatStringLiterals BEGIN ====
My name is Tobey or Tobey or 'Tobey' or 'Tobey'
12.34567
result: 12.34567
12.346
20230201
0x400
10000000000
Json name is product.id
" and
==== TestFormatStringLiterals END ====
参考
以上是关于[Python]_[初级]_[字符串格式化的三种方法]的主要内容,如果未能解决你的问题,请参考以下文章