Python字符串格式化的几种方法
wc 老外直呼内行
方法一: 使用%s格式化
方法二: 使用字母f加字符串格式化,与方法三类似
方法三: 方法三:使用{}格式化
方法三: 使用 string 的Template对象格式化
贴上代码直接直观感受一下吧
学习Python的第一天,记录总结一下,以备不时之需
import datetime
from string import Template
if __name__ == '__main__':
# 格式化的语法: "{" [field_name] ["!" conversion] [":" format_spec] "}"
# 解释: { [xxx.属性名|数字[数字|属性]] [![s|a|r]] [":" format_spec] }
name = "lin jian hui 来啦"
name1 = "hah"
# 每天不上进,不思进取,被女朋友罚抄 我要好好学习天天向上 100遍
# 【在java中要使用for循环,在Python中直接使用 字符串 * 次数即可 so easy】
print("Good good study ,day day up \n" * 100)
# 方法一:使用%s格式化
# 注意 python 2.6以前使用的是%s 格式化的
print("%s" % name)
print("%s,%s" % (name, name1))
# 方法二:使用字母f加字符串格式化,与方法三类似
print(f"hello world, {name}")
# 方法三:使用{}格式化
# 注意 python 2.6及以后 可以使用的是%s格式化,但更多的使用{}占位符格式化,我的版本是python 3.10
# 可以使用key=value的形式格式化字符串,花括号的中的名字和format中的key相同即可,key和value的值可以一样
print("My name is {name},I am {age} years old".format(name=name, age=20))
print("My name is {name},I am {age} years old".format(name=name1, age=18))
# 以下两行等价, 下标占位符可以任意指定,但要把握分寸,不能越界
print('{0}, {1}, {2}'.format('a', 'b', 'c'))
print('{} {}, {}'.format('a', 'b', 'c'))
# 可以拆包 并合理指定位置
print('{2}, {1}, {0}'.format(*'abc'))
# 下标占位符可以重复
print('{0},{1},{0}'.format('abra', 'cad'))
# 如果就要表达花括号 而不是特殊字符,使用两个相同即可
print('{{,}} 我是{0}'.format('共产党员'))
# 定义一个dictionary object【字典对象】 在java中相当于 json 对象
person = {"name": "lin jian hui ", "age": 18, "country": "中国"}
# 定义一个数字列表
numberList = [12, 34, 56]
# {0.xxx属性} 表示第一个参数的xxx属性,其它以此类推
print("Name is {0[name]}".format(person))
print("Name is {name}".format(name=person["name"]))
# 通过字典设置格式化参数,占位符的key可以字典中的key一致即可
print("通过关键词参数设置字典格式化参数:\n姓名:{name}, 年龄:{age},国家:{country}".format(**person))
# 一次性传入多个参数
print("数字列表:\n数字1={}, 数字2={},数字3={}".format(*numberList))
# 关键字参数的第一个元素
personList = [person]
print("Fisrt person is : {personList[0]}".format(personList=personList))
print("Fisrt person is : {}".format(personList[0]))
# !s 表示调用str()方法,!r表示调用repr()方法【返回正规的字符串】,!a表示调用ascii() # 暂时不知道有该在什么场景下用
print("我是{0!s}\n,{0!r}\n,{0!a}".format(person))
# 0代表第一个参数【其它以此类推】,当且仅当只有一个占位符的时候0可以省略
print("格式化数字:千分位加逗号 {0:4,d}\n格式化数字:千分位加逗号 {0:,}".format(12345678))
# 填充 < 表示左对齐; > 表示右对齐; ^表示居中对齐; = 只对有符号的数字有效【用处不大】
# {位置参数:[要填充的字符串,不填默认空格][<|>|=|^][总长度,是一个数字]}
print('{0:=<30}'.format('左对齐,不足30填充等号'))
print('{0:*>30}'.format('右对齐,不足30填充星号'))
print('{0:$^30}'.format('居中对齐,不足30填充美元符号'))
print('等号填充{0:==30}'.format(30))
# 0代表第一个参数【其它以此类推】
print("十进制数: {0:d}; 十六进制数: {0:x}; 八进制数: {0:o}; 二进制数: {0:b}".format(42))
print("十进制数: {0:d}; 十六进制数: {0:#x}; 八进制数: {0:#o}; 二进制数: {0:#b}".format(42))
print("保留2位小数: {0:.2f}".format(42))
print("百分比保留2位小数: {0:.2%}".format(42 / 100))
print("格式化日期: {:%Y-%m-%d %H:%M:%S}".format(datetime.datetime.now()))
"""
推导式填充 < 表示左对齐; > 表示右对齐; ^表示居中对齐
在此例子中将<^>作为变量
left<<<<<<<<<<<<
^^^^^center^^^^^
>>>>>>>>>>>right
"""
for align, text in zip('<^>', ['left', 'center', 'right']):
print('{0:{fill}{align}16}'.format(text, fill=align, align=align))
"""
推导式填充 dXob 分别代表十进制、十六进制、八进制、二进制
在此例子中将dXob作为变量
"""
for num in range(5, 12):
for base in 'dXob':
print('{0:{width}{base}}'.format(num, base=base, width=5), end=' ')
print()
# 方法四
# 扩展 使用 string 的Template对象格式化:
# 参数为字典对象,占位符格式为:$属性名 ,使用 安全的safe_substitute(dictObj)方法 当key不存在时,原样输出,而不是抛出异常
# 导入对象template :from string import Template
print(Template('$name likes $what').safe_substitute(dict(name="lin jian hui", age="18")))
学霸之所能成为学霸,是因为当看到一道题没有思路的或无从入手时,学霸早就已经联想到可行的几种解决方案,并在开始思考那种方法是最优解了
学到了就要教人,赚到了就要给人,欢迎有问题一起探讨,交流分享!
你现在多努力一分,以后老婆就多漂亮一分!
本文介绍了Python中多种字符串格式化的方法,包括使用%s、f-string、{}

被折叠的 条评论
为什么被折叠?



