python format string (转)

本文介绍Python中字符串格式化的各种方法,包括基本的%c、%s等格式化代码,以及更复杂的宽度、精度控制和字典格式化。
字符串的格式化


在python中也有类似于c中的printf()的格式输出标记。在python中格式化输出字符串使用的是%运算符,通用的形式为


格式标记字符串 % 要输出的值组
其中,左边部分的”格式标记字符串“可以完全和c中的一致。右边的'值组'如果有两个及以上的值则需要用小括号括起来,中间用短号隔开。重点来看左边的部分。左边部分的最简单形式为:

%cdoe
其中的code有多种,不过由于在python中,所有东西都可以转换成string类型,因此,如果没有什么特殊需求完全可以全部使用’%s‘来标记。比如:

'%s %s %s' % (1, 2.3, ['one', 'two', 'three'])
它的输出为'1 2.3 ['one', 'two', 'three']',就是按照%左边的标记输出的。虽然第一个和第二值不是string类型,一样没有问题。在这个过程中,当电脑发现第一个值不是%s时,会先调用整型数的函数,把第一个值也就是1转成string类型,然后再调用str()函数来输出。前面说过还有一个repr()函数,如果要用这个函数,可以用%r来标记。除了%s外,还有很多类似的code:

整型数:%d
无符号整型数:%u
八进制:%o
十六进制:%x %X
浮点数:%f
科学记数法: %e %E
根据数值的不同自动选择%e或%f: %g
根据数值的不同自动选择%E或%f: %G
就跟前面说用\进行转义一样,这里用%作为格式标记的标识,也有一个%本身应该如何输出的问题。如果要在”格式标记字符串“中输出%本身,可以用%%来表示。
上面说的只是格式标记的最简间的形式,来看复杂一点的:

‘%6.2f’ % 1.235
在这种形式中,在f的前面出现了一个类似小数的6.2它表示的意思是,总共输出的长度为6个字符,其中小数2位。还有更复杂的:

‘%06.2f’ % 1.235
在6的前面多了一个0,表示如果输出的位数不足6位就用0补足6位。这一行的输出为‘001.24’,可以看到小数也占用一位。类似于这里0这样的标记还有-、+。其中,-表示左对齐,+表示在正数前面也标上+号,默认是不加的。最后来看最复杂的形式:

‘%(name)s:%(score)06.1f’ %{'score':9.5, 'name':'newsim'}
这种形式只用在要输出的内容为dictionary(一种python的数据类型)时,小括号中的(name)和(score)对应于后面的键值对中的键。前面的例子可以看到,”格式标记字符串“中标记的顺序和"要输出的值组"中的值是一一对应的,有顺序,一对一,二对二。而在这种形式中,则不是,每个格式标记对应哪个值由小括号中的键来指定。这行代码的输出为:'newsim:0009.5'。

有时候在%6.2f这种形式中,6和2也不能事先指定,会在程序运行过程中再产生,那怎么输入呢,当然不能用%%d.%df或%d.%d%f。可以用%*.*f的形式,当然在后面的”要输出的值组“中包含那两个*的值。比如:'%*.*f' % (6, 2, 2.345)就相当于'%6.2f' % 2.345。

这是这本书到此为止看起来最复杂的内容。不过如果记不住,或不想那么耐烦,完全可以全部用%s代替,或者用多个"+"来构造类似的输出字符串。这里的%真有点除法的味道,怪不得设计者会选择用%这个除号。


象C 中的sprintf函数一样,可以用“%”来格式化字符串。

Table 3.1. 字符串格式化代码

格式 描述
%% 百分号标记
%c 字符及其ASCII码
%s 字符串
%d 有符号整数(十进制)
%u 无符号整数(十进制)
%o 无符号整数(八进制)
%x 无符号整数(十六进制)
%X 无符号整数(十六进制大写字符)
%e 浮点数字(科学计数法)
%E 浮点数字(科学计数法,用E代替e)
%f 浮点数字(用小数点符号)
%g 浮点数字(根据值的大小采用%e或%f)
%G 浮点数字(类似于%g)
%p 指针(用十六进制打印值的内存地址)
%n 存储输出字符的数量放进参数列表的下一个变量中
### Python 中 `string.format` 方法的用法 `string.format` 是 Python 提供的一种灵活且强大的字符串格式化方法[^1]。它允许用户通过指定占位符和对应的值来构造复杂的字符串。以下是关于 `string.format` 的详细说明和使用示例。 #### 基本语法 `string.format` 的基本语法如下: ```python "{}".format(value) ``` 其中 `{}` 是占位符,`value` 是要插入到字符串中的值。可以使用多个占位符,并为每个占位符提供对应的值。 #### 格式化占位符 占位符可以包含格式说明符,用于控制输出的格式。常见的占位符形式包括: - `{}`:简单的占位符,表示插入一个值。 - `{name}`:根据关键字参数插入值。 - `{index}`:根据位置参数插入值。 - `{index:format_spec}`:结合位置参数和格式说明符。 #### 示例代码 以下是一些常见的 `string.format` 使用示例: ##### 示例 1:基本格式化 ```python print("Hello, {}!".format("World")) # 输出 "Hello, World!" ``` ##### 示例 2:使用位置参数 ```python print("{0} {1}".format("Hello", "World")) # 输出 "Hello World" print("{1} {0}".format("Hello", "World")) # 输出 "World Hello" ``` ##### 示例 3:使用关键字参数 ```python print("{greeting}, {target}!".format(greeting="Hello", target="World")) # 输出 "Hello, World!" ``` ##### 示例 4:格式说明符 ```python # 浮点数格式化 print("The value is {:.2f}".format(3.14159)) # 输出 "The value is 3.14" # 整数格式化 print("The value is {:d}".format(42)) # 输出 "The value is 42" # 字符串对齐 print("{:<10}".format("left")) # 左对齐,宽度为10 print("{:>10}".format("right")) # 右对齐,宽度为10 print("{:^10}".format("center")) # 居中对齐,宽度为10 ``` #### 与 f-string 的对比 从 Python 3.6 开始,f-string 成为了更简洁的字符串格式化方式[^1]。然而,在较旧的 Python 版本中(如 Python 3.7 以下),`string.format` 是推荐的选择。例如: ```python # 使用 string.format name = "Alice" age = 30 print("Name: {}, Age: {}".format(name, age)) # 输出 "Name: Alice, Age: 30" # 使用 f-string print(f"Name: {name}, Age: {age}") # 输出 "Name: Alice, Age: 30" ``` #### 总结 `string.format` 是一种功能强大且兼容性良好的字符串格式化方法,适用于需要向后兼容的场景。对于现代 Python 版本,f-string 是更简洁的选择,但在某些特定情况下(如动态生成格式字符串),`string.format` 仍然是不可或缺的工具。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值