Python系列之——字符串格式化(xiaozhan is a boy of 22 years old.)

简介: 不知道小伙伴有没有遇到过字符串输出有格式要求的情况呢?今天小詹学习分享一波python的字符串格式化的方法。学以致用,首先我们得明确为什么要格式化字符串输出,以及在哪些场景可能会用的上?考虑到这个一百度就有很多,就不赘述啦。

纯干货文章,容易口渴,但是耐心看完你绝对会有收获噢~


不知道小伙伴有没有遇到过字符串输出有格式要求的情况呢?今天小詹学习分享一波python的字符串格式化的方法。学以致用,首先我们得明确为什么要格式化字符串输出,以及在哪些场景可能会用的上?考虑到这个一百度就有很多,就不赘述啦。

今天的重点是如何基于python对字符串进行格式化输出?小詹先给出两种方法,再逐一按照实例介绍

#方法一: % 格式方式
        %[(name)][flags][width].[precision]typecode
#方法二: format 方式
        [[fill]align][sign][#][0][width][,][.precision][type]

方法一 % 格式符

基本形式:%[(name)][flags][width].[precision]typecode

  • (name)      可选,用于选择指定的key(与字典形式结合,选择指定的key,友情提醒,字典没有顺序的说法噢)
  • flags          可选,可供选择的值有: + - 空格 0
  • width         可选,占有宽度
  • .precision   可选,小数点后保留的位数(小詹友情提醒,整型d可是没有小数的说法噢)
  • typecode    必选!


以下结合实例说明每个参数的概念和使用:

1.  (name)      可选,用于选择指定的key,输出字典中指定的key对应的值,字典中没有顺序,只有键值对对应即可:

a = "%(name)s is a %(sex)s of %(age)d years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
#运行的结果是(为便于查看,就放到代码一起了):
>>>xiaozhan is a boy of 22 years old.

2.    flags       可选,可供选择的值有:(通常与width结合)

  • +       右对齐;正数前加正号,负数前加负号;
  • -        左对齐;正数前无符号,负数前加负号;
  • 空格    右对齐;正数前加空格,负数前加负号;
  • 0        右对齐;正数前无符号,负数前加负号;用0填充空白处

3.    width      可选,占有宽度

这里结合2.3,以对比右对齐和左对齐为例;如下的age部分:

a = "%(name)s is a %(sex)s of %(age)+5d years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
a = "%(name)s is a %(sex)s of %(age)-5d years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
#运行的结果是(为便于查看,就放到代码一起了):
>>>xiaozhan is a boy of   +22 years old.
>>>xiaozhan is a boy of 22    years old.

4.   .precision    可选,小数点后保留的位数(小詹再次提醒,不要忘了整型无小数噢)

这里比较好懂,还是那句话为例,只不过得把key:age改成float类型!

#认真比较区别!
a = "%(name)s is a %(sex)s of %(age)+10f years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
a = "%(name)s is a %(sex)s of %(age)+.10f years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
#运行的结果是(为便于查看,就放到代码一起了):
>>>xiaozhan is a boy of +22.000000 years old.
>>>xiaozhan is a boy of +22.0000000000 years old.

细心的朋友会发现上述两句仅有一点之差噢!没错,第一个是没有‘.’,那么10代表的是【width】,为占位宽度;第二个有‘.’,代表【.precision】,为小数点个数

5.  typecode    必选(哎哟喂!唯一一个必选!)表示获取对应类型的值并格式化到指定位置

  • s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
  • r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
  • c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
  • o,将整数转换成 八  进制表示,并将其格式化到指定位置
  • x,将整数转换成十六进制表示,并将其格式化到指定位置
  • d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
  • e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
  • E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
  • f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
  • F,同上
  • g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
  • G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
  • %,当字符串中存在格式化标志时,需要用 %%表示一个百分号

这里用的最多应当是字符型‘s',整型'd',浮点数'f'~对应前边的age即可了解,不做重复举例啦~

这里来一个综合示例:(借用闹笑话那次的啦~)

#综合案例
name = input('name:')
sex = input('sex:')
age = int(input('age:'))
salary = int(input('salary:'))
info = '''\
------info of me-------
name:% 10s
sex:% 10s
age:% 10d
salary:% 10d
'''% (name,sex,age,salary)
print(info)
#运行过程放在这一起方便查看:
name:xiaozhan
sex:boy
age:22
salary:1000000
------info of me-------
name:  xiaozhan
sex:       boy
age:        22
salary:   1000000

方法二 format方式

基本形式: [[fill]align][sign][#][width][,][.precision][type]

  • fill           【可选】空白处填充的字符
  • align        【可选】对齐方式(需配合width使用)
  • sign         【可选】有无符号数字【同方法一的flags,仅+-0三种取值】
  • #            【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
  • ,            【可选】为数字添加分隔符,如:1,000,000
  • width       【可选】格式化位所占宽度
  • .precision 【可选】小数位保留精度
  • type         【可选】格式化类型,类似方法一,不重复叙述


这里是用格式化字符串的函数 str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 : 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。和第一种方法一样,以下结合实例说明每个参数的概念和使用:

1.  fill           【可选】空白处填充的字符 这里比第一种方式拓展性好,可以指定填充的字符

2.  align        【可选】对齐方式(需配合width使用)

  • <,内容左对齐
  • >,内容右对齐(默认)
  • ^,内容居中
  • ^,内容居中=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效 即使:符号+填充物+数字

3.  width       【可选】格式化位所占宽度

以上三个参数结合起来使用较为频繁,例如下面是不同姿势的'我爱小詹'

a = '---{:*<18s}--- span="" class="hljs-string" style="font-size: inherit; line-height: inherit; color: rgb(209, 241, 169); word-wrap: inherit !important; word-break: inherit !important;" a=".format('我爱小詹')
print(a)
#便于展示,结果放代码一起
>>>---我爱小詹**************---
>>>---*******我爱小詹*******---
>>>---**************我爱小詹---

4.  #            【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示

  • b,将10进制整数自动转换成2进制表示然后格式化
  • c,将10进制整数自动转换为其对应的unicode字符
  • d,十进制整数
  • o,将10进制整数自动转换成8进制表示然后格式化;
  • x,将10进制整数自动转换成16进制表示然后格式化(小写x)
  • X,将10进制整数自动转换成16进制表示然后格式化(大写X)

下面以小詹的age举例,以二进制的15为例(才不告诉你小詹才15岁呢):

a = 'xiaozhan is {:d} years old'.format(15)
print(a)
a = 'xiaozhan is {:b} years old'.format(15)
print(a)
a = 'xiaozhan is {:#b} years old'.format(15)
print(a)
#便于展示,结果放代码一起
>>>xiaozhan is 15 years old
>>>xiaozhan is 1111 years old
>>>xiaozhan is 0b1111 years old

5. ,            【可选】为数字添加分隔符,如:1,000,000

6. .precision 【可选】小数位保留精度【同方法一,整型无小数】

这里以小詹年薪salary为例哈哈,注意关键区别在{}内:

a = "xiaozhan's salary is {:,d} per year".format(1000000)
print(a) 
a = "xiaozhan's salary is {:.2f} per year".format(1000000)
print(a)
a = "xiaozhan's salary is {:,.2f} per year".format(1000000)
print(a)
#便于展示,结果放代码一起
>>>xiaozhan's salary is 1,000,000 per year
>>>xiaozhan's salary is 1000000.00 per year
>>>xiaozhan's salary is 1,000,000.00 per year

基本到这里,两种方法都学的差不多了,小伙伴们自己实操下肯定没啥问题。最后值得一提的是format方法中不一定要将所有值重复列,有重复的可以用类似字典键值对的形式存放。如下例,就用了num=15省去了重复列举15的过程:

a = "numbers: {num:b},{num:o},\
    {num:d},{num:x},{num:X}, \
    {char:c}".format(num=15,char=65)
print(a)
#便于展示,结果放代码一起
>>>numbers: 1111,17,15,f,F,A
相关文章
|
3月前
|
存储 算法 数据库
使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
`hashlib` 是 Python 中用于实现哈希功能的模块,它可以将任意长度的输入通过哈希算法转换为固定长度的输出,即散列值。该模块主要用于字符串加密,例如将用户名和密码转换为不可逆的散列值存储,从而提高安全性。`hashlib` 提供了多种哈希算法,如 `md5`、`sha1`、`sha256` 等。
58 1
|
1月前
|
Python
【10月更文挑战第6天】「Mac上学Python 12」基础篇6 - 输入输出与格式化详解
本篇将详细介绍Python中的输入和输出函数,包括 `print()` 和 `input()` 函数的使用,涵盖格式化输出、类型转换及常见的字符串格式化方法。通过学习本篇,用户将掌握如何使用Python进行输入输出操作,并能灵活运用格式化输出处理数据。
59 1
【10月更文挑战第6天】「Mac上学Python 12」基础篇6 - 输入输出与格式化详解
|
1月前
|
Python
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
本篇将详细介绍Python中的字符串类型及其常见操作,包括字符串的定义、转义字符的使用、字符串的连接与格式化、字符串的重复和切片、不可变性、编码与解码以及常用内置方法等。通过本篇学习,用户将掌握字符串的操作技巧,并能灵活处理文本数据。
54 1
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
|
2月前
|
Python
python获取字符串()里面的字符
在Python中,如果你想获取字符串中括号(比如圆括号`()`、方括号`[]`或花括号`{}`)内的字符,你可以使用正则表达式(通过`re`模块)或者手动编写代码来遍历字符串并检查字符。 这里,我将给出使用正则表达式的一个例子,因为它提供了一种灵活且强大的方式来匹配复杂的字符串模式。 ### 使用正则表达式 正则表达式允许你指定一个模式,Python的`re`模块可以搜索字符串以查找匹配该模式的所有实例。 #### 示例:获取圆括号`()`内的内容 ```python import re def get_content_in_parentheses(s): # 使用正则表达
97 36
|
1月前
|
自然语言处理 Java 数据处理
【速收藏】python字符串操作,你会几个?
【速收藏】python字符串操作,你会几个?
55 7
|
1月前
|
Python
Python 格式化输出的高级技巧与应用
Python 格式化输出技术可让数据展示更加清晰易读。本文介绍了四种高级技巧:使用 `%` 占位符进行简单格式化;利用 `format()` 方法提供更灵活的参数位置控制;通过 `{:.2f}` 格式化浮点数保留两位小数;使用 `&lt;`, `&gt;`, `^` 对齐方式及字符填充;最后,展示了如何用特定格式代码格式化日期和时间。这些技巧能够显著提升代码的可读性和美观性。
30 6
|
1月前
|
索引 Python
Python 高级编程:深入探索字符串切片
在Python中,字符串切片功能强大,可灵活提取特定部分。本文详细介绍切片技巧:基本切片、省略起始或结束索引、使用负数索引、设定步长及反转字符串等。此外,还介绍了如何结合其他操作进行切片处理,如先转换大小写再提取子串。 来源:https://www.wodianping.com/yeyou/2024-10/48238.html
37 4
|
2月前
|
Python
python第三方库-字符串编码工具 chardet 的使用(python3经典编程案例)
这篇文章介绍了如何使用Python的第三方库chardet来检测字符串的编码类型,包括ASCII、GBK、UTF-8和日文编码的检测示例。
126 6
|
2月前
|
网络协议 网络安全 开发者
Python 向IP地址发送字符串
Python 向IP地址发送字符串
|
2月前
|
Python
Python 中取字符串中等于号后面的内容
Python 中取字符串中等于号后面的内容在编程过程中,我们经常需要从字符串中提取特定的信息。一个常见的任务是在给定的字符串中查找等于号(=)后面的内容。这种需求在解析配置文件、处理查询字符串或分析日志数据时尤其常见。 如何实现 在Python中,我们可以使用多种方法来实现此功能。以下是几种常用的方法,包括字符串操作和正则表达式。 方法 1:使用字符串分割 我们可以使用字符串的 split() 方法将字符串拆分为两个部分,然后提取等于号后的值。 示例代码 ----------------------------------- ©著作权归作者所有:来自51CTO博客作者bruce_xiao