18.Python格式化字符串(格式化输出)
Python 提供了“%”对各种类型的数据进行格式化输出,例如如下代码:
- price = 108
- print ("the book's price is %s" % price)
上面程序中的 print 函数包含以下三个部分,第一部分是格式化字符串(相当于字符串模板),该格式化字符串中包含一个“%s”占位符,它会被第三部分的变量或表达式的值代替;第二部分固定使用“%”作为分隔符。
格式化字符串中的“%s”被称为转换说明符(Conversion Specifier),其作用相当于一个占位符,它会被后面的变量或表达式的值代替。“%s”指定将变量或值使用 str() 函数转换为字符串。
如果格式化字符串中包含多个“%s”占位符,第三部分也应该对应地提供多个变量,并且使用圆括号将这些变量括起来。例如如下代码:
- user = "Charli"
- age = 8
- # 格式化字符串有两个占位符,第三部分提供2个变量
- print("%s is a %s years old boy" % (user , age))
在格式化字符串中难道只能使用“%s”吗?还有其他转换说明符吗?如果只有“%s”这一种形式,Python 的格式化功能未免也太单一了。
实际上, Python 提供了如表 1 所示的转换说明符:
转换说明符 | 说明 |
---|---|
%d,%i | 转换为带符号的十进制形式的整数 |
%o | 转换为带符号的八进制形式的整数 |
%x,%X | 转换为带符号的十六进制形式的整数 |
%e | 转化为科学计数法表示的浮点数(e 小写) |
%E | 转化为科学计数法表示的浮点数(E 大写) |
%f,%F | 转化为十进制形式的浮点数 |
%g | 智能选择使用 %f 或 %e 格式 |
%G | 智能选择使用 %F 或 %E 格式 |
%c | 格式化字符及其 ASCII 码 |
%r | 使用 repr() 将变量或表达式转换为字符串 |
%s | 使用 str() 将变量或表达式转换为字符串 |
当使用上面的转换说明符时,可指定转换后的最小宽度,例如如下代码:
- num = -28
- print("num is: %6i" % num)
- print("num is: %6d" % num)
- print("num is: %6o" % num)
- print("num is: %6x" % num)
- print("num is: %6X" % num)
- print("num is: %6s" % num)
运行上面代码,可以看到如下输出结果:
num is: -28
num is: -28
num is: -34
num is: -1c
num is: -1C
num is: -28
从上面的输出结果可以看出,此时指定了字符串的最小宽度为 6,因此程序转换数值时总宽度为 6,程序自动在数值前面补充了三个空格。
在默认情况下,转换出来的字符串总是右对齐的,不够宽度时左边补充空格。Python 也允许在最小宽度之前添加一个标志来改变这种行为,Python 支持如下标志:
- -:指定左对齐。
- +:表示数值总要带着符号(正数带“+”,负数带“-”)。
- 0:表示不补充空格,而是补充 0。
提示:这三个标志可以同时存在。
例如如下代码:
- num2 = 30
- # 最小宽度为0,左边补0
- print("num2 is: %06d" % num2)
- # 最小宽度为6,左边补0,总带上符号
- print("num2 is: %+06d" % num2)
- # 最小宽度为6,右对齐
- print("num2 is: %-6d" % num2)
运行上面代码,可以看到如下输出结果:
num2 is: 000030
num2 is: +00030
num2 is: 30
对于转换浮点数,Python 还允许指定小数点后的数字位数:如果转换的是字符串,Python 允许指定转换后的字符串的最大字符数。这个标志被称为精度值,该精度值被放在最小宽度之后,中间用点 ( . ) 隔开。例如如下代码:
- my_value = 3.001415926535
- # 最小宽度为8,小数点后保留3位
- print("my_value is: %8.3f" % my_value)
- # 最小宽度为8,小数点后保留3位,左边补0
- print("my_value is: %08.3f" % my_value)
- # 最小宽度为8,小数点后保留3位,左边补0,始终带符号
- print("my_value is: %+08.3f" % my_value)
- the_name = "Charlie"
- # 只保留3个字符
- print("the name is: %.3s" % the_name) # 输出Cha
- # 只保留2个字符,最小宽度10
- print("the name is: %10.2s" % the_name)
运行上面代码,可以看到如下输出结果:
my_value is: 3.001
my_value is: 0003.001
my_value is: +003.001
the name is: Cha
the name is: Ch
18.Python格式化字符串(格式化输出)的更多相关文章
- python 使用json.dumps() 的indent 参数,获得漂亮的格式化字符串后输出
想获得漂亮的格式化字符串后输出,可以使用json.dumps() 的indent 参数.它会使得输出和pprint() 函数效果类似 >>> data {'age': 4, 'nam ...
- python(七)字符串格式化、生成器与迭代器
字符串格式化 Python的字符串格式化有两种方式:百分号方式.format方式 1.百分号的方式 %[(name)][flags][width].[precision]typecode (name) ...
- Python 的字符串格式化和颜色控制
(部分内容源自武神博客和网络收集.) Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两 ...
- Python基础-字符串格式化_百分号方式_format方式
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- python中字符串格式化%与.format
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python:字符串格式化
Python中提供了多种格式化字符串的方式,遇到一个项目,在一个文件中,就用了至少两种方式.特别是在使用Log时,更让人迷惑. 因此特地花时间来了解一下Python中字符串格式化的几种方式: # -* ...
- Python基础 | 字符串格式化输出及print()函数介绍
在写代码时,我们会经常与字符串打交道,Python中控制字符串格式通常有三种形式,分别是使用str%,str.format(),f-str,用法都差不多,但又有一些细微之差. 一起来看看吧~~~ 一. ...
- python中字符串格式化的意义(化妆)
格式 描述%% 百分号标记 #就是输出一个%%c 字符及其ASCII码%s 字符串%d 有符号整数(十进制)%u 无符号整数(十进制)%o 无符号整数(八进制)%x 无符号整数(十六进制)%X 无符号 ...
- Python进阶-字符串格式化
目录 前言 %格式化 str.format() f-Strings 特殊符号处理 前言 在 Python 3.6 之前,字符串格式化方法主要有两种: %格式化 str.format() 在Python ...
- python的字符串格式化
1.python到底有那几种字符串格式化模块? python有3种格式化字符串的方法: 传统的%字符串格式符 str.format函数 字符串模版template 新的python 3.6+还提供了新 ...
随机推荐
- 2019中山纪念中学夏令营-Day4[JZOJ]
Begin (题目的排序方式:难易程度) 什么是对拍: 对拍是一种在写完程序后,验证自己程序是不是正解的比较方便的方法. 实现过程: 对同一道题,再打一个暴力程序,然后用一些大数据等跑暴力程序来进行验 ...
- liunx 安装rsync
新建一个rsync.s文件,把下面的代码写入文件里: #!/usr/bin/env bash mkdir -p /data/app/rsync/etc/ mkdir -p /data/logs/rsy ...
- 微信小程序,预览在开发工具上显示正常,手机预览二维码报request->fail错误,打开手机的调试功能又正常。
这里错误很明显是属于网址错误,开发工具和手机调试都能走request->success: 唯独常规模式下无法显示. 最开始调试过很多方法,没找出原因.最后到小程序开发设置才发现,自己未配置服务器 ...
- Storm项目开发纪要
1.POM引用storm-core和javax.servlet-api这两个组件,如果本地模式跑拓扑,要把<scope>provided</scope>去掉:如果远程发布运行, ...
- Spingboot项目的创建与启动(基于IDEA)
一.Springboot的创建 1.Springboot的优点: Springboot是来简化Spring框架,从而能够更加简单快捷的构建Spring应用的框架,其具有如下优点: ①为所有Spring ...
- linux上搭建单机版hadoop和spark
依赖的安装包 首先hadoop和spark肯定是必须的,而hadoop是用java编写的,spark是由Scala编写的,所以还需要安装jdk和scala. 大数据第三方组件我们统统都安装在/opt目 ...
- 解压速度更快, Zstandard 1.4.1 发布
zstd 1.4.1 发布了,zstd 又叫 Zstandard,它是一种快速无损压缩算法,主要应用于 zlib 级别的实时压缩场景,并且具有更好的压缩比.zstd 还可以以压缩速度为代价提供更强的压 ...
- 浙大数据结构课后习题 练习一 7-1 Maximum Subsequence Sum (25 分)
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to ...
- RPM包搭建
打包rpm软件包之spec文件解析 1. 概述 RPM的全称是(Red Hat Package Manager,Red Hat包管理器).RPM是一个开放的软件包管理器,工作在Red Hat.类Lin ...
- 如何自己搭建DNS服务器
DNS服务器是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由 解析器和域名服务器组成的.域名服务器是指保存有该网络中所有主机的域名和 ...