来源: “码农不会写诗”公众号
链接:Python基本数据类型之字符串str
字符串str
Python基本数据之字符串(str)即用单引号或双引号括起来的文本数据。
01 基本概念
即用单引号或双引号括起来的文本数据。
Python字符串(str)用于表示文本数据,是一种非常基础且常用的数据类型,一定要扎实掌握。字符串可以包含数字、字母、下划线以及任何Unicode字符。
单引号和双引号:用于表示普通的字符串。
str1 = 'Hello, World!'
str2 = "Hello, World!"
三引号:主要在表示多行字符串或字符串中包含单引号或双引号时使用。
str3 = '''Hello,
World!''' # 多行字符串
str4 = """He's happy!""" # 字符串内容包含单引号'
需要注意的是字符串是不可变的(Immutable):一旦创建,就不能更改字符串中的字符。
str1 = 'Hello, World!'
str1[0] = 'a' # 错误操作, TypeError: 'str' object does not support item assignment
字符串是序列:可以进行索引和切片操作,索引操作取某位置字符值,切片操作允许获取字符串一部分。
正索引:从左到右,以0开始;
负索引:从右到左,以-1开始。
str1 = 'Hello, World!'
print(str1[0]) # H
print(str1[1]) # e
print(str1[-1]) # !
print(str1[-2]) # d
# 索引规则为:左闭右开
print(str1[0:5]) # Hello, 切片取0到5
print(str1[7:]) # World!, 切片取7到结束
print(str1[-6:-1]) # World, 切片取倒数2到倒数6
02 常用操作
+ 操作符连接字符串。
str1 = 'Hello'
str2 = ', '
str3 = 'World!'
print(str1 + str2 + str3) # Hello, World!
*操作符重复字符串。
str1 = 'Hello, '
print(str1 * 3) # Hello, Hello, Hello,
find()、index() 方法查找子字符串。
str1 = 'Hello, World!'
print(str1.find(', ')) # 5, 从索引5开始
print(str1.index('e')) # 1, 从索引1开始
print(str1.find('World')) # 7, 从索引7开始
print(str1.index('W')) # 7, 从索引7开始
print(str1.find('X')) # -1, 查找不到返回-1
print(str1.index('X')) # 查找不到直接报错, ValueError: substring not found
replace() 方法替换子字符串。
str1 = 'Hello, World!'
str2 = str1.replace('World', 'Python')
print(str1) # Hello, World!, 原字符串str1没有被修改
print(str2) # Hello, Python!
字母大小写转换。
upper(): 所有字母转换为大写字母;
lower(): 所有字母转换为小写字母;
capitalize(): 第一个字母转换为大写,其余字母转换为小写;
title(): 每个单词的首字母转换为大写,其余字母转换为小写,通常用于处理标题;
swapcase(): 大写字母转换为小写,小写字母转换为大写。
str1 = 'Hello, World!'
print(str1.upper()) # HELLO, WORLD!
print(str1.lower()) # hello, world!
print(str1.capitalize()) # Hello, world!
print(str1.title()) # Hello, World!
print(str1.swapcase()) # hELLO, wORLD!
去除字符操作。
strip(): 去除字符串首尾的指定字符(默认为空格)。也可传入一个参数,指定要去除的字符,若传入字符数组,则去除两端所有相应的字符,直到没有匹配的字符为止。
rstrip(): 去除字符串末尾(right) 的指定字符(默认为空格)。也可传入一个参数,同strip()。
lstrip(): 去除字符串开头(left) 的指定字符(默认为空格)。也可传入一个参数,同strip()。
# 采用f-string(格式化字符串字面量)格式化输出,可简单理解为将{}中变量的值直接填在字符串中{}所在的位置
str1 = ' Hello, World! '
print(f"[{str1}]") # [ Hello, World! ] # [ Hello, World! ]
print(f"[{str1.strip()}]") # [Hello, World!]
print(f"[{str1.rstrip()}]") # [ Hello, World!]
print(f"[{str1.lstrip()}]") # [Hello, World! ]
03 字符串格式化
字符串格式化是一种将变量插入到字符串中的方法。主要有以下三种常用方法。
1. 传统%格式化
在字符串中使用%符号作为占位符,并在后面的元组中传递相应变量,Python会自动将变量的值嵌入到字符串中。%s表示字符串;%d表示整数;%.2f表示保留两位小数的浮点数(保留小数位数:%.1f一位小数、%.5f五位小数)。
name1 = 'World'
name2 = 'Python'
pi = 3.1415927
print('Hello, %s!' % name1) # Hello, World!
print('Hello, %s and %s!' % (name1, name2)) # Hello, World and Python!
print("Rounded pi: %.1f" % pi) # Rounded pi: 3.1
print("Rounded pi: %.4f" % pi) # Rounded pi: 3.1416
2. format() 方法
str.format() 方法是Python3引入的字符串格式化方法。通过在字符串中使用花括号 {} 来占位,并在后面调用 .format() 方法传递变量,Python会自动将变量的值嵌入到字符串中。格式化浮点数时,在{}中:后指定保留小数位数({:.1f}一位小数、{:.5f}五位小数)。
name1 = 'World'
name2 = 'Python'
pi = 3.1415927
print('Hello, {}!'.format(name1)) # Hello, World!
print('Hello, {} and {}!'.format(name1, name2)) # Hello, World and Python!
print("Pi rounded to 2 decimal places: {:.2f}".format(pi))
print("Rounded pi: {:.2f}".format(pi)) # Rounded pi: 3.1
print("Rounded pi: {:.4f}".format(pi)) # Rounded pi: 3.1416
3. f-string (Python 3.6+)
在字符串前加上字母f,并在字符串内部使用花括号 {} 包裹变量,Python会自动将变量的值嵌入到字符串中。格式化浮点数时,在{}中:后指定保留小数位数({num:.1f}一位小数、{num:.5f}五位小数)。
name1 = 'World'
name2 = 'Python'
pi = 3.1415927
print(f'Hello, {name1}!') # Hello, World!
print(f'Hello, {name1} and {name2}!') # Hello, World and Python!
print(f"Rounded pi: {pi:.2f}") # Rounded pi: 3.1
print(f"Rounded pi: {pi:.4f}") # Rounded pi: 3.1416
04 拓展1之Python字符串的编码与解码
文本字符串和字节序列是信息表达的两种基本形式,Python提供了简洁而强大的机制来处理两种形式之间的转换,即字符串的编码与解码。
编码:字符串到字节的转换
即将字符串(str)转换成字节序列(bytes)。
在处理文件、网络传输或与底层系统交互时较为常用,借助encode() 方法可轻松实现。
text1 = "Hello, World!"
# b'Hello, World!', 使用UTF-8编码转换为字节序列
print(text1.encode('utf-8'))
text2 = "我爱Python!"
# b'\xe6\x88\x91\xe7\x88\xb1Python!' 使用UTF-8编码转换为字节序列
print(text2.encode('utf-8'))
解码:字节到字符串的转换
即将字节序列(bytes)转换成字符串(str)。
在使用二进制数据或从文件中读取数据时较为常用,借助**decode()**方法可轻松实现。
text1 = "Hello, World!"
byte_text1 = text1.encode('utf-8')
print(byte_text1.decode('utf-8')) # Hello, World!
text2 = "我爱Python!"
byte_text2 = text2.encode('utf-8')
print(byte_text2.decode('utf-8')) # 我爱Python!
今天的内容就到这里啦,先拜了个拜~