Python学习笔记——第四章 字符串

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表示指数)
Ee相同,但是使用E表示指数
f将小数表示为定点数
F与f相同,但对于特殊值(nan和inf),使用大写表示
g自动在定点表示法和科学表示法之间做出选择。这是默认用于小数的说明符,但默认情况下至少有一位小数
Gg相同,但是使用大写来表示指数和特殊值
ng相同,但插入随区域而异的数字分隔符
o将整数表示为八进制数
s保持字符串的格式不变,这是默认用于字符串的说明符
x将整数表示为十六进制并使用小写字母
Xx相同,但表示为大写字母
%将数表示为百分比值(乘以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(宽度[,填充])将字符串居中,并将其左右填充指定字符(类似方法还有ljustrjust
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
  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泠曦れいひ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值