...

Python中的字符串格式化方法

有时候我们需要把一些变量填写到一个字符串中,如我们有3个变量

name="张三"
gender="男"
age="21"

假如我需要把它们放入以下字符串中。

"hi, 我叫     , 性别     , 年龄      "
  • 拆分拼接
name="张三"
gender="男"
age=21
string = "hi, 我叫 " + name + ", 性别 "+ gender + ", 年龄 " + age
print(string)

输出格式如下:

hi, 我叫 张三, 性别 男, 年龄 21

当有多个变量时往往要拆开很多段,不推荐。一般我们采用字符串格式化的方法。
字符串格式化是在字符串中先埋设占位符,然后后面在依次或根据名称填上对应的变量值,占位符一般分为无名占位符和具名占位符。

%格式化,示例如下:

string = "hi, 我叫 %s, 性别 %s, 年龄 %d" % ("张三", "男", 21)  # %s表示字符串格式 %d表示数字格式
print(string)

# 具名占位符
string = "hi, 我叫 %(name)s, 性别 %(gender)s, 年龄 %(age)d" % {"name": "张三", "gender": "男", "age": 21}
print(string)

注意:使用%格式化,所有的占位符,后面的变量都要给出

输出格式如下:

hi, 我叫 张三, 性别 男, 年龄 21
hi, 我叫 张三, 性别 男, 年龄 21

使用字符串.format()方法

name="张三"
gender="男"
age="21"
string = "hi, 我叫 {}, 性别 {}, 年龄 {}".format(name, gender, age)  # 使用{}或{数字}作为占位符
print(string)
string = "hi, 我叫 {name}, 性别 {gender}, 年龄 {age}".format(name=name, gender=gender, age=age)
print(string)

输出结果如下:

hi, 我叫 张三, 性别 男, 年龄 21
hi, 我叫 张三, 性别 男, 年龄 21

使用f字符串

在字符串引号前加上f可以将已知变量快速填充到字符串中

name="张三"
gender="男"
age="21"
string = f"hi, 我叫 {name}, 性别 {gender}, 年龄 {age}"
print(string)

注: f字符串大括号中还支持表达式计算,如{age+1}

输出结果如下:

hi, 我叫 张三, 性别 男, 年龄 21

格式化$变量

from string import Template
string = "hi, 我叫 $name, 性别 $gender, 年龄 $age"
string = Template(string).safe_substitute(name="张三", gender="男", age=21)
print(string)

变量使用 $变量${变量} 都可以,使用safe_substitute()替换时,如果字符串中有些变量没有给出时保留原样。

输出结果如下:

hi, 我叫 张三, 性别 男, 年龄 21

使用jinja2

使用三方包jinja2可以在模板中支持if判断,for循环等更加复杂的变量替换,安装方法如下:

pip install jinja2
from jinja2 import Template

string = 'hi, 我叫 {{name}},' \
         '性别 {% if gender==1 %}男{% else %}女{% endif %},' \
         '年龄 {{age}}, ' \
         '爱好 {% for item in hobbies %}{{item}} {% endfor %}'

string = Template(string).render(name="张三", gender=1, age=21, hobbies=['篮球','足球', '乒乓球'])

print(string)

输出结果如下:

hi, 我叫 张三,性别 男,年龄 21, 爱好 篮球 足球 乒乓球 
posted @ 2020-10-18 22:36  韩志超  阅读(272)  评论(0编辑  收藏  举报