Python中字符串格式化str.format的详细介绍


Posted in Python onFebruary 17, 2017

前言

Python 在 2.6 版本中新加了一个字符串格式化方法: str.format() 。它的基本语法是通过 {} 和 : 来代替以前的 %.。

格式化时的占位符语法:

replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

“映射”规则

通过位置

str.format() 可以接受不限个参数,位置可以不按顺序:

>>> "{0} {1}".format("hello", "world")
'hello world'
>>> "{} {}".format("hello", "world")
'hello world'
>>> "{1} {0} {1}".format("hello", "world")
'world hello world'

通过关键字参数

使用关键参数时字符串中需要提供参数名:

>>> "I am {name}, age is {age}".format(name="huoty", age=18)
'I am huoty, age is 18'
>>> user = {"name": "huoty", "age": 18}
>>> "I am {name}, age is {age}".format(**user)
'I am huoty, age is 18'

通过对象属性

str.format() 可以直接读取用户属性:

>>> class User(object):
...  def __init__(self, name, age):
...   self.name = name
...   self.age = age
...   
...  def __str__(self):
...   return "{self.name}({self.age})".format(self=self)
...  
...  def __repr__(self):
...   return self.__str__()
...  
...
>>> user = User("huoty", 18)
>>> user
huoty(18)
>>> "I am {user.name}, age is {user.age}".format(user=user)
'I am huoty, age is 18'

通过下标

在需要格式化的字符串内部可以通过下标来访问元素:

>>> names, ages = ["huoty", "esenich", "anan"], [18, 16, 8]
>>> "I am {0[0]}, age is {1[2]}".format(names, ages)
'I am huoty, age is 8'
>>> users = {"names": ["huoty", "esenich", "anan"], "ages": [18, 16, 8]}
>>> "I am {names[0]}, age is {ages[0]}".format(**users)

指定转化

可以指定字符串的转化类型:

conversion ::= "r" | "s" | "a"

其中 "!r" 对应 repr(); "!s" 对应 str(); "!a" 对应 ascii()。 示例:

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"

格式限定符

填充与对齐

填充常跟对齐一起使用。^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。

>>> "{:>8}".format("181716")
' 181716'
>>> "{:0>8}".format("181716")
'00181716'
>>> "{:->8}".format("181716")
'--181716'
>>> "{:-<8}".format("181716")
'181716--'
>>> "{:-^8}".format("181716")
'-181716-'
>>> "{:-<25}>".format("Here ")
'Here -------------------->'

浮点精度

用 f 表示浮点类型,并可以在其前边加上精度控制:

>>> "[ {:.2f} ]".format(321.33345)
'[ 321.33 ]'
>>> "[ {:.1f} ]".format(321.33345)
'[ 321.3 ]'
>>> "[ {:.4f} ]".format(321.33345)
'[ 321.3335 ]'
>>> "[ {:.4f} ]".format(321)
'[ 321.0000 ]'

还可以为浮点数指定符号,+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格,在幅负数前加 -;- 与什么都不加({:f})时一致:

>>> '{:+f}; {:+f}'.format(3.141592657, -3.141592657)
'+3.141593; -3.141593'
>>> '{: f}; {: f}'.format(3.141592657, -3.141592657)
' 3.141593; -3.141593'
>>> '{:f}; {:f}'.format(3.141592657, -3.141592657)
'3.141593; -3.141593'
>>> '{:-f}; {:-f}'.format(3.141592657, -3.141592657)
'3.141593; -3.141593'
>>> '{:+.4f}; {:+.4f}'.format(3.141592657, -3.141592657)
'+3.1416; -3.1416'

指定进制

>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(18)
'int: 18; hex: 12; oct: 22; bin: 10010'
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(18)
'int: 18; hex: 0x12; oct: 0o22; bin: 0b10010'

千位分隔符

可以使用 "," 来作为千位分隔符:

>>> '{:,}'.format(1234567890)
'1,234,567,890'

百分数显示

>>> "progress: {:.2%}".format(19.88/22)
'progress: 90.36%'

事实上,format 还支持更多的类型符号:

type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

其他技巧

占位符嵌套

某些时候占位符嵌套还是很有用的:

>>> '{0:{fill}{align}16}'.format("hello", fill='*', align='^')
'*****hello******'
>>>
>>> for num in range(5,12):
...  for base in "dXob":
...   print("{0:{width}{base}}".format(num, base=base, width=5), end=' ')
...  print()
...  
...
 5  5  5 101
 6  6  6 110
 7  7  7 111
 8  8 10 1000
 9  9 11 1001
 10  A 12 1010
 11  B 13 1011

作为函数使用

可以先不指定格式化参数,而是在不要的地方作为函数来调用:

>>> email_f = "Your email address was {email}".format
>>> print(email_f(email="suodhuoty@gmail.com"))
Your email address was sudohuoty@gmail.com

转义大括号

当在字符串中需要使用大括号时可以用大括号转义:

>>> " The {} set is often represented as { {0} } ".format("empty")
' The empty set is often represented as {0} '

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python的类方法和静态方法
Dec 13 Python
python实现的文件同步服务器实例
Jun 02 Python
Python数据分析之双色球中蓝红球分析统计示例
Feb 03 Python
python逐行读写txt文件的实例讲解
Apr 03 Python
pytorch 数据集图片显示方法
Jul 26 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
Python字符串对象实现原理详解
Jul 01 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
python如何将两张图片生成为全景图片
Mar 05 Python
python实现处理mysql结果输出方式
Apr 09 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
Python爬虫:通过关键字爬取百度图片
Feb 17 #Python
Python 遍历列表里面序号和值的方法(三种)
Feb 17 #Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 #Python
Python之日期与时间处理模块(date和datetime)
Feb 16 #Python
python字符串中的单双引
Feb 16 #Python
使用PyV8在Python爬虫中执行js代码
Feb 16 #Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 #Python
You might like
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
JS拖拽组件学习使用
2016/01/19 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
jQuery实时统计输入框字数及限制
2020/06/24 jQuery
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
英国著名的药妆网站:Escentual
2016/07/29 全球购物
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
小学敬老月活动方案
2014/02/11 职场文书
门前三包责任书
2014/04/15 职场文书
我爱我校演讲稿
2014/05/21 职场文书
学校清明节活动总结
2014/07/04 职场文书
离婚起诉书范本
2015/05/18 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫