博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python字符串的格式化,看这一篇就够了
阅读量:4944 次
发布时间:2019-06-11

本文共 2954 字,大约阅读时间需要 9 分钟。

知识星球

相信很多人在格式化字符串的时候都用"%s" % v的语法,PEP 3101 提出一种更先进的格式化方法 str.format() 并成为 Python 3 的标准用来替换旧的 %s 格式化语法,CPython 从 2.6 开始已经实现了这一方法(其它解释器未考证)。

format()

新的 format() 方法其实更像是一个简略版的模板引起(Template Engine),功能非常丰富。

模板中替换变量用 {} 包围,且由 : 分为两部分,其中后半部分 format_spec 在后面会单独讨论。

前半部分有三种用法:

  • 代表位置的数字
  • 代表keyword的标识符

这与函数调用的参数类别是一致的

print("{} {}".format("Hello", "World"))# 等同于以下几种print("{0} {1}".format("Hello", "World"))print("{hello} {world}".format(hello="Hello", world="World"))print("{0}{1}{0}".format("H", "e"))# Hello World# Hello World# Hello World# HeH

除此之外,就像函数参数的解包一样,format() 中也可以直接使用解包操作

print("{author}.{city}".format(**{"author": "Miracle", "city": "上海"}))print("{} {}".format(*["Miracle", "上海"]))Miracle.上海Miracle 上海

在模板中还可以通过 .identifier 和 [key] 的方式获取变量内的属性或值(需要注意的是 "{}{}" 相当于 "{0}{1}")

data = {'author': 'Miracle', 'like': 'papapa'}print("Author: {0[author]}, Like: {0[like]}".format(data))langs = ["Python", "Ruby"]print("{0[0]} vs {0[1]}".format(langs))print("\n====\nHelp(format):{.__doc__}".format(str.format))# Name: Python, Score: 100# Python vs Ruby# ====# Help(format):#  S.format(*args, **kwargs) -> str

强制转换,可以通过 ! + r|s|a 的方式对替换的变量进行强制转换

  • "{!r}" 对变量调用 repr()
  • "{!s}" 对变量调用 str()
  • "{!a}" 对变量调用 ascii()

冒号之后的部分定义输出的样式

align 代表对齐方向,通常要配合 width 使用,而 fill 则是填充的字符(默认为空白):

for align, text in zip("<^>", ["left", "center", "right"]):   # 务必看懂这句话   print("{:{fill}{align}16}".format(text, fill=align, align=align))print("{:0=10}".format(100)) # = 只允许数字# left<<<<<<<<<<<<# ^^^^^center^^^^^# >>>>>>>>>>>right# 0000000100

同时可以看出,样式设置里面可以嵌套 {} ,但是必须通过 keyword 指定,且只能嵌套一层。

接下来是符号样式:+|-|' ' 分别指定数字是否需要强制符号(其中空格是指在正数的时候不显示 + 但保留一位空格)

print("{0:+}\n{1:-}\n{0: }".format(3.14, -3.14))# +3.14# -3.14# 3.14

用于表示特殊格式的数字(二进制、十六进制等)是否需要前缀符号

逗号也是用于表示数字时是否需要在千位处进行分隔

0 相当于前面的{:0=} 右对齐并用 0 补充空位

print("Binary: {0:b} => {0:#b}".format(3))print("Large Number: {0:} => {0:,}".format(1.25e6))print("Padding: {0:16} => {0:016}".format(3))# Binary: 11 => 0b11# Large Number: 1250000.0 => 1,250,000.0# Padding:                3 => 0000000000000003

最后小胖给大家介绍一下熟悉的小数点精度问题, .n 和格式化类型。

这里仅给出一些示例,详细内容可以查阅文档:

from math import piprint("pi = {pi:.2}, also = {pi:.7}".format(pi=pi))# pi = 3.1, also = 3.141593

Integer

for t in "b c d #o #x #X n".split():   print("Type {0:>2} of {1} shows: {1:{t}}".format(t, 97, t=t))# Type  b of 97 shows: 1100001# Type  c of 97 shows: a# Type  d of 97 shows: 97# Type #o of 97 shows: 0o141# Type #x of 97 shows: 0x61# Type #X of 97 shows: 0X61# Type  n of 97 shows: 97

Float

for t, n in zip("eEfFgGn%", [12345, 12345, 1.3, 1.3, 1, 2, 3.14, 0.985]):   print("Type {} shows: {:.2{t}}".format(t, n, t=t))# Type e shows: 1.23e+04# Type E shows: 1.23E+04# Type f shows: 1.30# Type F shows: 1.30# Type g shows: 1# Type G shows: 2# Type n shows: 3.1# Type % shows: 98.50%

String (default)

try:   print("{:s}".format(123))except:   print("{}".format(456))# 456

关注公众号「Python专栏」,后台回复「腾讯架构资源1」,获取由腾讯架构师整理的大数据学习全套资源包!

Python专栏二维码

转载于:https://www.cnblogs.com/moonhmily/p/10596188.html

你可能感兴趣的文章
SQL Server常用脚本
查看>>
专家:未来机器人取代办公室工作人员的概率很高
查看>>
根据当前登录域账号 获取AD用户姓名和所在OU目录
查看>>
ASP.NET - 用户控件制作
查看>>
CentOS 6.8-final Samba test OK
查看>>
CentOS 6.5克隆后eth1与eth0的问题
查看>>
[国家集训队]小Z的袜子 | 普通莫队
查看>>
企业信息系统——SCM
查看>>
ESXI6.0 时间(时区)显示不一致
查看>>
流程控制 while循环 运算符
查看>>
go时间和日期
查看>>
Collection中的List,Set的toString()方法
查看>>
mysql中You can’t specify target table for update in FROM clause错误解决方法
查看>>
Iterator --迭代器
查看>>
根据两点的经纬度计算两地距离
查看>>
向webabcd先生致敬!
查看>>
拉格朗日乘子法与KKT条件 && SVM中为什么要用对偶问题
查看>>
【转】好的用户界面-界面设计的一些技巧
查看>>
IDEA+Tomcat热部署自动编译
查看>>
Xcode里-ObjC, -all_load, -force_load
查看>>