Python 字符串

22次阅读
没有评论

共计 4738 个字符,预计需要花费 12 分钟才能阅读完成。

Python 3 字符串默认是 16 位 Unicode 编码,使用 ord()可将字符串转成对应的 Unicode 码,使用 chr()可将十进制数转成对应字符。

字符串函数

startswith()

v = 'abcdefg'
result = v.startswith('ab') # 是否以 ab 开头,返回布尔值
result1 = v.endswith('g') # 是否以 g 结尾,返回布尔值
print(result) # 结果为:True
print(result) # 结果为:True

isdecimal()

v = 'a'
v1 = '1'
v2 = 'u00b2'
v3 = '一千'
print(v.isdecimal()) # 是否为十进制数(整数),结果为:False
print(v1.isdecimal()) # 结果为:True
print(v2.isdigit()) # 结果为:True
print(v3.isnumeric()) # 可判断汉字数字,结果为:True

strip()

v = '123 abc'
result = v.strip() # 去除字符串两边的空格、换行符、制表符
print(result) # 结果为:123 abc

lstrip()去除左边空白,rstrip()去除右边空白。

v = 'a123 abca'
result = v.strip('a1') # 去除字符串两边指定的内容
print(result) # 结果为:23 abc

isspace 判断字符串是否是一个由空格组成的字符串。

大小写转换

upper()变大写,变小写为 lower()

v = '123abc'
result = v.upper()
print(result) # 结果为:123ABC

将字符串转换为词首大写:

>>> s = 'I love python!'
>>> s.title()
'I Love Python!'

swapcase()对字符串的大小写字母进行转换,即将大写字母转换为小写字母,小写字母转换为大写字母。

capitalize()把字符串的第一个字符大写。

istitle 判断字符串是否是一个标题类型。isupper、islower 判断字符串中的字母是否都是大 / 小写。

replace()

v = '123abc'
result = v.replace('123', '456') # 字符串内容替换
print(result) # 结果为:456abc

translate()

这个方法的优势在于能够同时替换多个字符,因此效率比 replace 高。

使用 translate 前须先创建一个转换表,指出不同 Unicode 码点之间的转换关系。要创建转换表,可用字符串类型 str 调用方法 maketrans。

>>> table = str.maketrans('cs', 'kz')
>>> s = 'this is an incredible test'
>>> s.translate(table)
'thiz iz an inkredible tezt'

调用方法 maketrans 时,还有可选的第三个参数,指定要将哪些字母删除:

>>> table = str.maketrans('cs', 'kz', ' ')
>>> s.translate(table)
'thizizaninkredibletezt'

split()

v = '123|abc|456'
result = v.split('|') # 字符串切割,返回列表
print(result) # 结果为:['123', 'abc', '456']

result = v.split('|', 1) # 指定切割几次,返回列表
print(result) # 结果为:['123', 'abc|456']

v = '123|abc|456'
result = v.rsplit('|', 1) # 从右向左切割,返回列表
print(result) # 结果为:['123|abc', '456']

join()

v = ['123', 'abc', '456']
result = '|'.join(v) # 字符串拼接
print(result) # 结果为:123|abc|456

使用字符串拼接符 +,会生成新的字符串对象,因此不推荐使用 + 来拼接字符串。

推荐使用 join 函数,因为 join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。

encode()

v = '编程' # Unicode,字符串类型
result = v.encode('utf-8') # utf-8,字节类型
result2 = v.encode('gbk') # gbk,字节类型
print(result) # 结果为:b'xe7xbcx96xe7xa8x8b'
print(result2) # 结果为:b'xb1xe0xb3xcc'

v2 = result2.decode('gbk')
print(v2) # 结果为:编程

find()

在字符串中查找子串。如果找到,返回索引,否则返回 -1。

>>> s = 'I Love Python!'
>>> s.find('ve')
4
>>> s.find('i')
-1
>>> s.find('ve', 5) # 指定搜索的起点
-1
>>> s.find('ve', 1, 6) # 指定搜索的起点和终点
4

find 找不到元素,会返回 -1。index 找不到元素,会导致程序报错。

center()

v = '编程'
result = v.center(10, '-') # 字符串内容居中显示
result2 = v.ljust(10, '-') # 居左
result3 = v.rjust(10, '-') # 居右
print(result) # 结果为:---- 编程 ----
print(result2) # 结果为:编程 --------
print(result3) # 结果为:-------- 编程

zfill()

v = '编程'
result = v.zfill(10) # 填充 0
print(result) # 结果为:00000000 编程

removeprefix()

从字符串中删除前缀,removesuffix()剔除字符串的后缀。

s = "https://www.baidu.com/"
s2 = s.removeprefix("https://")
print(s2)  # www.baidu.com/
s3 = s2.removesuffix("/")
print(s3)  # www.baidu.com

字符串格式化

Python 常见的数据类型占位:

  • %s:字符串占位
  • %d:整数占位
  • %f:浮点型占位

可以使用辅助符号“m.n”来控制数据的宽度和精度。

%

name = " 李小龙 "
age = 18
height = 1.666
text = " 我叫 %s,今年 %4d 岁,身高 %3.2f" % (name, age, height)
print(text)  # 结果为:我叫李小龙,今年  18 岁,身高 1.67

百分比

## %% 输出 %
text = '%s,我已经下载 99%% 了' %'李小龙'
print(text) # 结果为:李小龙,我已经下载 99% 了

format()

>>> a = " 名字是:{0},年龄是:{1}"
>>> a.format('张三', 18)
'名字是:张三,年龄是:18'

>>> b = " 名字是:{name},年龄是:{age}"
>>> b.format(age = 18, name = '张三')
'名字是:张三,年龄是:18'

>>> c = " 姓名:{name},年龄:{1},性别:{sex}, 爱好:{0}"
>>> c.format(666, 2, name='张三', sex='男')
'姓名:张三,年龄:2,性别:男, 爱好:666'

在使用 format 字符串格式化时,也可以这样操作:

s1 = " 名字是:{},年龄是:{}".format(*['张三', 18])
print(s1) # 结果为:名字是:张三,年龄是:18

s2 = " 名字是:{name},年龄是:{age}".format(**{'name':'张三', 'age':18})
print(s2) # 结果为:名字是:张三,年龄是:18

要在最终结果中包含花括号,可在格式字符串中使用两个花括号(即{{或}})来指定。

s = " 名字是:{{0}},年龄是:{{1}}".format()
print(s) # 结果为:名字是:{0},年龄是:{1}

基本转换

>>> print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
π 'π' 'u03c0'

三个标志(s、r 和 a)指定分别使用 str、repr 和 ascii 进行转换。函数 str 通常创建外观普通的字符串版本。函数 repr 尝试创建给定值的 Python 表示。函数 ascii 创建只包含 ASCII 字符的表示。

填充与对齐

:后面带填充的字符(只能一个字符,不指定默认是空格)
^、<、> 分别是居中、左对齐、右对齐,后面带宽度

>>> c = " 名字是:{name},年龄是:{age:*^8}"
>>> c.format(age = 18, name = '张三')
'名字是:张三,年龄是:***18***'

说明符 =,指定将填充字符放在符号和数字之间。

>>> print("{0:*=8.2f}".format(-3.14))
-***3.14

浮点数用 f,整数用 d 进行格式化,具体如下:

>>> a = " 名字是:{0},存款有:{1:.2f}"
>>> a.format('张三', 200.2222)
'名字是:张三,存款有:200.22'

>>> b = " 名字是:{0},存款有:{1:0>8d}"
>>> b.format('张三', 200)
'名字是:张三,存款有:00000200'

f 快速格式化字符串

在 Python3.8 引入。

name = " 李小龙 "
age = 18
height = 1.666
text = f" 我叫{name},明年{age + 1 =} 岁,身高{height}"
print(text)  # 结果为:我叫李小龙,今年 age + 1 = 19 岁,身高 1.666

进制转换

t1 = f'我今年 {18} 岁'
print(t1)

t2 = f'我今年 {18:#b} 岁'
print(t2)

t3 = f'我今年 {18:#o} 岁'
print(t3)

t4 = f'我今年 {18:#x} 岁'
print(t4)

输出结果如下:

我今年 18 岁
我今年 0b10010 岁
我今年 0o22 岁
我今年 0x12 岁
name = 'abc'
text = f'我叫{name.upper()}'
print(text) # 结果为:我叫 ABC

如果要在 f -string 中包含大括号字符,可以使用额外的大括号来转义它:

>>> name = '李小龙'
>>> f'我叫{{name}}'
'我叫{name}'

如果使用 Python 3.6 或更高版本,请使用 f -string。

str 和 repr

str 能以合理的方式将值转换为用户能够看懂的字符串,而 repr 通常会获得值的合法 Python 表达式表示。

>>> s = 'Hello, nworld!'
>>> print(repr(s))
'Hello, nworld!'
>>> print(str(s))
Hello,
world!

str 是一个类,但 repr 是一个函数。

长字符串、原始字符串

要表示很长的字符串(跨越多行的字符串),可使用三引号。

>>> print(''' 我是
... 李
... 小
... 龙 ''')
我是
李
小
龙

常规字符串也可横跨多行,只要在行尾加上反斜杠,反斜杠和换行符将被转义,即被忽略。

>>> print(' 我是 \
... 李小龙 ')
我是李小龙

原始字符串 用前缀 r 表示。可在原始字符串中包含任何字符,一个例外是,引号需要像通常那样进行转义,但这意味着用于执行转义的反斜杠也将包含在最终的字符串中。

>>> print("Let\'s go!")
Let's go!
>>> print(r"Let\'s go!")
Let\'s go!

另外,原始字符串不能以单个反斜杠结尾。如果要指定以反斜杠结尾的原始字符串(如以反斜杠结尾的 DOS 路径),该如何办呢?

>>> print(r'C:\hello''\\')
C:\hello\

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2023-08-14发表,共计4738字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)