python基础入门:2.3字符串高级操作
字符串高级操作
1. 字符串格式化技巧
1.1 f-string(Python 3.6+)
基础用法:
name = "Alice"
age = 25
print(f"{name}今年{age}岁") # Alice今年25岁
高级格式控制:
pi = 3.1415926
# 保留两位小数
print(f"圆周率:{pi:.2f}") # 圆周率:3.14
# 十六进制转换
print(f"255的十六进制:{255:#x}") # 255的十六进制:0xff
# 千位分隔符
print(f"{1000000:_}") # 1_000_000
1.2 format方法
位置参数与关键字参数:
# 顺序传参
print("{}的{}成绩是{}".format("小明", "数学", 95))
# 关键字参数
print("{name}的{subject}成绩是{score}".format(
name="小红",
subject="物理",
score=88
))
格式规范:
# 对齐与填充
print("{:*^20}".format("居中")) # ********居中********
# 科学计数法
print("{:.2e}".format(0.001234)) # 1.23e-03
# 类型转换
print("{!r}".format("带引号")) # '带引号'
格式化方式对比:
特性 | f-string | format |
---|---|---|
可读性 | 高 | 中 |
版本要求 | Python 3.6+ | Python 2.6+ |
表达式内运算 | 支持 | 不支持 |
局部变量访问 | 直接访问 | 需传参 |
动态格式字符串 | 受限 | 灵活支持 |
2. 切片操作与核心方法
2.1 切片操作
基本语法:
text = "Python编程指南"
print(text[2:5]) # tho(索引2到4)
print(text[:3]) # Pyt(从头到索引2)
print(text[6:]) # 编程指南(索引6到末尾)
print(text[-3:]) # 南(最后三个字符)
print(text[::2]) # Pto编南(步长2)
索引示意图:
2.2 核心字符串方法
split与join:
# 分割与重组
csv_data = "apple,banana,cherry"
fruits = csv_data.split(",") # ['apple', 'banana', 'cherry']
new_str = "|".join(fruits) # apple|banana|cherry
# 多分隔符分割(正则表达式)
import re
text = "苹果;香蕉,橘子"
print(re.split(r"[;,\s]+", text)) # ['苹果', '香蕉', '橘子']
strip清理:
user_input = " admin@example.com \t\n"
clean_email = user_input.strip() # admin@example.com
# 定向清理
text = "==重要通知=="
print(text.strip("=")) # 重要通知
其他实用方法:
# 判断前缀/后缀
filename = "report.pdf"
print(filename.endswith(".pdf")) # True
# 替换内容
sentence = "我喜欢Java"
print(sentence.replace("Java", "Python")) # 我喜欢Python
# 查找定位
text = "寻找子串位置"
index = text.find("子串") # 3(找不到返回-1)
3. 转义字符与原始字符串
3.1 常用转义字符
转义符 | 说明 | 示例 |
---|---|---|
\n | 换行符 | print(“第1行\n第2行”) |
\t | 制表符 | “姓名\t年龄” |
\\ | 反斜杠 | “C:\Users” |
\' | 单引号 | ‘I’m here’ |
\x | 十六进制字符 | “\x41” → ‘A’ |
3.2 原始字符串应用
禁用转义处理:
# 常规字符串
path = "C:\\Users\\Documents\\file.txt" # 需要双反斜杠
# 原始字符串
path = r"C:\Users\Documents\file.txt" # 自动处理反斜杠
正则表达式场景:
import re
pattern = r"\d{3}-\d{4}" # 匹配000-0000格式
text = "电话:123-4567"
re.findall(pattern, text) # ['123-4567']
多行字符串处理:
# 三引号保持格式
sql = r"""
SELECT *
FROM users
WHERE age > 18
"""
4. 常见问题与解决方案
问题1:切片越界处理
text = "Python"
print(text[2:10]) # 自动截断 → 'thon'
print(text[-10:2]) # 返回空字符串
问题2:格式化类型错误
# 错误示例
price = 99.5
print(f"价格:{price:d}") # ValueError: Unknown format code 'd'
# 正确转换
print(f"价格:{int(price)}元") # 价格:99元
问题3:转义符意外生效
# 错误路径写法
print("新建文件夹\note") # \n被识别为换行
# 正确方案
print(r"新建文件夹\note") # 原始字符串
5. 性能优化建议
- 字符串拼接:
# 低效写法(每次拼接创建新对象)
result = ""
for s in ["a", "b", "c"]:
result += s
# 高效写法
parts = []
for s in ["a", "b", "c"]:
parts.append(s)
result = "".join(parts)
- 预编译正则表达式:
import re
pattern = re.compile(r"\d+") # 预编译
data = "abc123def456"
pattern.findall(data) # ['123', '456']
下节预告:我们将深入探讨Python的列表与元组操作,并通过实现一个高效的数据过滤系统来实践容器类型的高级用法。