相信很多人在格式化字符串的时候都用"%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 pi
print("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」,获取由腾讯架构师整理的大数据学习全套资源包!

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

Python字符串的格式化,看这一篇就够了相关推荐

  1. Python:基本语法看这一篇就够了

    前言 将之前的Python文章修改.扩展,并整合到一起,方便查阅. 一.python胶水语言 计算机语言类型 编译型语言:将源代码编译生成机器语言,再由机器运行机器码(二进制). 解释性语言:在运行的 ...

  2. python变量详解_Python 变量详解[学习 Python 必备基础知识][看此一篇就够了]

    您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 1 P ...

  3. 关于python的浮点数类型、以下_python入门教程Python 浮点数数据类型详解 [学习 Python 必备基础知识][看此一篇就够了]...

    python基础语法.jpg 您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其 ...

  4. Python 列表数据类型(list)[学习 Python 必备基础知识][看此一篇就够了]

    您的"关注"和"点赞",是信任,是认可,是支持,是动力- 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 文章目录 1 P ...

  5. Python 第三方库大全看这一篇就够了(1000+工具包)

    awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学 ...

  6. python多进程和多线程看这一篇就够了

    脑海中关于进程和线程的概念一直很模糊,什么时候该用多进程,什么时候该用多线程总是搞不清楚.同时python因为历史遗留问题存在GIL全局锁,就让人更加困惑.这一篇就完整整理一下python中进程和线程 ...

  7. Python 注释详解[学习 Python 必备基础知识][看此一篇就够了]

    您的"关注"和"点赞",是信任,是认可,是支持,是动力- 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 文章目录 1 P ...

  8. python元组元素的提取比_Python 元组数据类型(tuple)详解 [访问元组元素][修改元组元素][删除元组][学习 Python 必备基础知识][看此一篇就够了]...

    您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 1 元 ...

  9. python复数类型转换_Python 复数数据类型详解(complex)[学习 Python 必备基础知识][看此一篇就够了]...

    您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 1 复 ...

  10. Python中计时,看这一篇就够了

    计时对于了解程序的性能是很关键的部分. 本文讨论了Python 2和python 3中计时方法,并完成了一个通用的计时装饰器. 一.python2和python3的通用计时方法 由于python2和3 ...

最新文章

  1. 整理了一个castle的文档,供大家学习使用
  2. java计算5 5_Java基础学习笔记 -- 5(运算符)
  3. 【转载】数据库范式那些事
  4. 基于使用AspectJ实现AOP,注解AOP开发(基于xml文件、基于注解)
  5. SpringMVC异常处理 自定义异常
  6. 在每趟长途的HTML5挑运之后
  7. python一般的基础代码-Python入门经典练习题
  8. 微信小程序 图片轮播 视频
  9. linux系统网络代理设置
  10. 扫描全能王文件上传不了服务器,如何将扫描全能王的文档轻松保存到坚果云?...
  11. 批量将多个 Excel 工作簿文件合并成单个 Excel 文件
  12. 翻译狗文档免费下载手册(补充版)
  13. python 日本 地图 热力图_【python实战】热力图——百度地图API
  14. 键盘无法输入字符和数字,但是功能键可以用
  15. python引入包报错
  16. 最好的都在这里了 2016上半年电影豆瓣口碑排行榜
  17. java面试宝典:留着慢慢看
  18. OS性能监控及优化——osw工具详解
  19. jdk1.8,64位linux版本下载路径.永久免费.这是一个爱分享的世界...
  20. 贺利氏收购瑞士安格-贺利氏全部股份 成为全球最大贵金属公司

热门文章

  1. 堆排序的应用-优先级队列
  2. 【恋上数据结构】回溯、剪枝(八皇后、n皇后)、LeetCode51.N皇后、LeetCode52.N皇后 II
  3. 【C++快速入门】面向对象篇
  4. 【jQuery笔记Part4】04-jQuery案例-轮播图
  5. 信息系统项目管理案例
  6. 从腾讯入职到离职,我仅用了三周:做大数据的同事看不起做报表的
  7. python遍历字典与for循环运用方法
  8. oracle用分号拼接函数,ORACLE以逗号分隔连接列的值   函数名:wmsys.wm_concat
  9. pwd赋值给变量 shell_Shell脚本中的变量详解
  10. 加入rtp组播_耗时10+小时撰写 带你系统认识组播 收藏这些概念