文章目录
4.1 设置字符串格式
设置字符串格式的方法有很多,这里主要介绍通过调用format
并传入需要设置的值来设置格式的信息,其中需要被替换的值用花括号包裹起来,如果需要在字符串中显示花括号,需要使用两个相同的花括号。
下面内容主要以format()
为主,但我们也可以在字符串时前使用f
标识符,效果一致。如下的两个语句效果是一样的
name = "泠曦"
age = "18"
print(f"name:{name:^10},age:{age:^10}")
name = "泠曦"
age = "18"
print("name:{name:^10},age:{age:^10}".format(name=name, age=age))
输出都是
name: 泠曦 ,age: 18
4.1.1 替换字段名
第一种方法则为在花括号内指明参数名称,在format
中给对应参数赋值:
print("{name},{age}".format(name="泠曦", age=18))
泠曦,18
第二种为不设置参数名,只在后面写上参数值,将会按照顺序填充:
print("{},{}".format("你好", "World"))
你好,World
第三种为设置索引,将会在后面括号中按照索引顺序获得对应值:
print("{1},{0}".format("字符串", "格式设置"))
格式设置,字符串
但是需要注意,手动设置索引和不设置索引自动引入不可以同时使用,否则将会出现错误:
print("{1},{}".format("字符串", "格式设置"))
print("{1},{}".format("字符串", "格式设置"))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: cannot switch from manual field specification to automatic field numbering
我们还可以使用.
来访问导入模块的函数、属性、变量:
import math
s = "从{mod.__name__}中获取圆周率:{mod.pi}"
print(s.format(mod=math))
从math中获取圆周率:3.141592653589793
4.1.2 基本转换
在指定字段中包含的值后,我们可以在后面添加如何设置其格式的指令:
print("{emoji!s}{emoji!r}{emoji!a}".format(emoji="😀"))
😀'😀''\U0001f600
上面分别将😀
指定为str(s)
、repr(r)
、ascii(a)
格式进行转换。
除此之外,我们还可以指定将值转换为哪种类型,如小数、二进制码等等。只需要将!
改为:
,然后写上对应的类型说明符即可。
如我们将63用十进制、二进制、八进制、十六进制展示出来:
print("十进制:{num:d}\t二进制:{num:b}\t八进制:{num:o}\t十六进制:{num:x}".format(num=63))
十进制:63 二进制:111111 八进制:77 十六进制:3f
字符串设置中的类型说明符见下表
类型 | 含义 |
---|---|
b | 将整数表示为二进制数 |
c | 将整数解读为Unicode码点 |
d | 将整数视为十进制数处理,整数默认会使用的说明符 |
e | 使用科学表示法来表示小数(用e表示指数) |
E | 与e 相同,但是使用E表示指数 |
f | 将小数表示为定点数 |
F | 与f相同,但对于特殊值(nan和inf),使用大写表示 |
g | 自动在定点表示法和科学表示法之间做出选择。这是默认用于小数的说明符,但默认情况下至少有一位小数 |
G | 与g 相同,但是使用大写来表示指数和特殊值 |
n | 与g 相同,但插入随区域而异的数字分隔符 |
o | 将整数表示为八进制数 |
s | 保持字符串的格式不变,这是默认用于字符串的说明符 |
x | 将整数表示为十六进制并使用小写字母 |
X | 与x 相同,但表示为大写字母 |
% | 将数表示为百分比值(乘以100,按说明符f 设置格式,最后加上%) |
4.1.3 宽度、精度和千位分隔符
宽度
需要设置宽度时,我们可以直接在:
后加上我们需要的宽度即可:
print("{num:8}".format(num=63))
print("{num:8f}".format(num=63))
63
63.000000
精度
设置精度时,需要先写上小数点,然后在后面写上需要设置的精度:
print("{num:.2f}".format(num=63))
63.00
千位分隔符
需要使用千位分隔符要使用,
:
print("{num:,}".format(num=10**10))
10,000,000,000
4.1.4 符号、对齐和填充
有些时候我们需要指定输出数据位置对齐,这里有三个符号可以表示对齐方式:<
左对齐,>
右对齐,^
中对其,它的具体实现效果如下:
print("{0:<10.2f}\n{0:^10.2f}\n{0:>10.2f}".format(pi))
3.14
3.14
3.14
而如果需要设置填充,我们可以在设置宽度和精度的数前面,添加0
、+
、-
或空格,其中0
表示使用数字0填充,-
为默认填充方式,+
会在正数前加上正号:
print("{:010.2f}".format(pi))
print("{: 10.2f}{: 10.2f}".format(pi, -pi))
print("{:+10.2f}{:+10.2f}".format(pi, -pi))
print("{:-10.2f}{:-10.2f}".format(pi, -pi))
0000003.14
3.14 -3.14
+3.14 -3.14
3.14 -3.14
我们还可以使用=
,它会将填充放置于符号和数字之间:
print("{:=+010.2f}\n{:=+010.2f}".format(pi, -pi))
+000003.14
-000003.14
最后还有一种标识符#
,将它放在符号说明符和宽度之间,他会触发另一种转换方式,转换细节随类型而异:
print("{:b}".format(63))
print("{:#b}".format(63))
print("{:g}".format(63))
print("{:#g}".format(63))
111111
0b111111
63
63.0000
4.2 字符串方法
关于字符串的方法有很多,这里只介绍比较常用的方法(其中方括号中的内容为可选内容):
方法 | 用处 |
---|---|
center(宽度[,填充]) | 将字符串居中,并将其左右填充指定字符(类似方法还有ljust 、rjust ) |
find(需要查找的内容[,起点,终点]) | 在字符串中从起点到终点查找对应内容,找到则返回第一次出现的索引,否则返回-1 |
join(序列) | 与split 相反,将序列合并为一个字符串(序列中的元素必须是字符串) |
lower() | 将字符串中所有字符转换为小写并返回 |
replace(指定子串,字符串) | 将指定子串替换为字符串 |
split([分隔符,分割次数]) | 将字符串根据分隔符位置分割为一个字符串列表(未指定分隔符则匹配空白字符) |
strip([指定字符]) | 删除字符串开头和结尾的指定字符(默认删除空格) |
translate(转换表) | 可以对字符串进行单字匹配替换,并删除指定的字符,但是使用前需要创建转换表,使用str.maketrans(目标字符,替换字符[,删除字符]) 创建 |
以下为各种方法的使用示例:
4.2.1 center(宽度[,填充])
s = "hello"
print(s.center(30)) # 使用空格填充居中
print(s.center(30, "*")) # 使用*填充
hello
************hello*************
4.2.2 find(需要查找的内容[,起点,终点])
s = "hello world"
print(s.find("l")) # 查找字符串中第一个匹配的位置
print(s.find("l", 3)) # 从第三个字符开始查找字符串中第一个匹配的位置
print(s.find("l", 4, 9)) # 从第三个字符开始,到第五个字符结束,查找字符串中第一个匹配的位置
2
3
-1
4.2.3 join(序列)
print("".join(["a", "b", "c"]))
abc
4.2.4 lower()
print("ABcdFgHiJk".lower())
abcdfghijk
4.2.5 replace(指定子串,字符串)
print("Hello World!".replace("l", "e"))
Heeeo Wored!
4.2.6 split([分隔符,分割次数])
s = "Hello python, hello world!"
print(s.split()) # 默认以空格为分隔符
print(s.split(",")) # 以逗号为分隔符
print(s.split(" ", 1)) # 以空格为分隔符,只分割一次
['Hello', 'python,', 'hello', 'world!']
['Hello python', ' hello world!']
['Hello', 'python, hello world!']
4.2.7 strip([指定字符])
s = " *** Hello World *** "
print(s.strip()) # 删除字符串头尾的空格
print(s.strip(" *")) # 删除字符串头尾指定的空格和*
*** Hello World ***
Hello World
4.2.8 translate(转换表)
s = "This is translate's test"
table = str.maketrans("is", "**") # 创建字符映射的转换表,配合translate方法使用
print(s.translate(table)) # 将字符串中的i,s替换为*,*
Th** ** tran*late'* te*t
4.2.9 判断字符串是否满足某些特定条件
方法 | 解释 |
---|---|
isalnum() | 检查字符串是否由字母和数字组成,即字符串中的所有字符都是字母或数字。如果字符串至少有一个字符,并且所有字符都是字母或数字,则返回 True ;否则返回 False 。 |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True , 否则返回 False |
isdigit() | 如果字符串只包含数字则返回 True 否则返回 False |
islower() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True ,否则返回 False |
isnumeric() | 如果字符串中只包含数字字符,则返回 True ,否则返回 False |
isspace() | 如果字符串中只包含空白,则返回 True ,否则返回 False . |
istitle() | 如果字符串是标题化的(见 title())则返回 True,否则返回 False |
isupper() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True ,否则返回 False |