Python3 字符串
Python3 字符串(String)
🎯 学习目标
掌握 Python 中字符串的
基本操作、
格式化方法、
编码处理及常见应用场景,
理解字符串的不可变性与常用方法。
能够在实际项目中灵活使用字符串进行数据处理、文件读写、网络通信等任务。
🔑 核心重点
| 分类 | 内容 |
|---|---|
| 基本定义 | 单引号、双引号、三引号定义字符串 |
| 不可变性 | 字符串一旦创建,不能修改内容 |
| 操作方法 | 切片、拼接、查找、替换、大小写转换、去除空格等 |
| 格式化方式 | f-string、.format()、% 格式化 |
| 编码与解码 | str 与 bytes 的转换,utf-8, gbk 等编码支持 |
| 实际应用场景 | 数据清洗、日志处理、HTML 解析、用户输入验证等 |
📚 详细讲解
一、什么是字符串?
字符串是 Python 中用于表示文本的数据类型。
它是由一系列字符组成的不可变序列。
✅ 定义方式:
s1 = 'Hello'
s2 = "Python"
s3 = '''多行
字符串'''
s4 = """带换行的
字符串"""
📌 特点:
- 使用单引号
'或双引号"定义 - 多行字符串使用三个引号
'''或"""
二、字符串的基本操作
✅ 1. 访问字符(索引)
s = "Python"
print(s[0]) # 输出:P
print(s[-1]) # 输出:n
⚠️ 越界访问会抛出
IndexError
✅ 2. 切片操作(slice)
s = "Python Programming"
print(s[0:6]) # 输出:Python
print(s[7:]) # 输出:Programming
print(s[::-1]) # 输出:gnimmargorP nohtyP (逆序)
✅ 3. 拼接与重复
a = "Hello"
b = "World"
print(a + " " + b) # 输出:Hello World
print(a * 3) # 输出:HelloHelloHello
✅ 4. 成员判断
s = "Python"
print('P' in s) # True
print('Java' not in s) # True
三、字符串常用方法
| 方法名 | 描述 | 示例 |
|---|---|---|
len(s) |
返回字符串长度 | len("abc") → 3 |
s.upper() |
全部转大写 | "hello".upper() → "HELLO" |
s.lower() |
全部转小写 | "HELLO".lower() → "hello" |
s.strip() |
去除两端空格 | " abc ".strip() → "abc" |
s.replace(old, new) |
替换子串 | "apple is good".replace("apple", "pear") |
s.split(sep) |
按分隔符分割成列表 | "a,b,c".split(",") → ['a', 'b', 'c'] |
s.find(sub) |
查找子串位置(找不到返回 -1) | "hello".find("e") → 1 |
s.index(sub) |
同 find,但找不到会抛异常 | "hello".index("e") → 1 |
s.startswith(prefix) |
判断是否以某字符串开头 | "http://example.com".startswith("http") |
s.endswith(suffix) |
判断是否以某字符串结尾 | "data.txt".endswith(".txt") |
s.isdigit() |
是否全为数字 | "123".isdigit() → True |
s.isalpha() |
是否全为字母 | "abc".isalpha() → True |
s.isalnum() |
是否为字母或数字组合 | "a1b2".isalnum() → True |
s.count(sub) |
统计子串出现次数 | "ababa".count("ab") → 2 |
四、字符串格式化方法
✅ 1. f-string(推荐,Python 3.6+)
name = "Alice"
age = 25
print(f"我的名字是 {name},今年 {age} 岁。")
📌 支持表达式和格式控制:
x = 12.345
print(f"x = {x:.2f}") # 输出:x = 12.35
✅ 2. .format() 方法
print("姓名:{0},年龄:{1}".format("Bob", 30))
print("姓名:{name},年龄:{age}".format(name="Tom", age=28))
✅ 3. % 格式化(旧方式)
print("姓名:%s,年龄:%d" % ("Jerry", 22))
五、字符串与编码
✅ str 与 bytes 转换
s = "你好,世界"
b = s.encode('utf-8') # 编码为字节流
print(b) # 输出:b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c'
s2 = b.decode('utf-8') # 解码回字符串
print(s2) # 输出:你好,世界
📌 常见编码:
utf-8:通用编码,推荐使用gbk:中文 Windows 默认编码latin1:单字节编码,适合二进制数据
六、多行字符串与原始字符串
✅ 多行字符串
doc = """这是一个
多行字符串示例,
可用于文档说明。"""
✅ 原始字符串(raw string)
在字符串前加 r,不转义特殊字符:
path = r"C:\Users\name\Documents"
print(path) # 输出:C:\Users\name\Documents
📌 常用于正则表达式、路径处理等场景。
⚠️ 注意事项
- 字符串是不可变对象,任何操作都会生成新字符串。
- 频繁拼接建议使用
join()而非+运算符。 - 文件读写时注意编码格式,避免乱码。
- 使用
f-string时注意变量作用域和类型兼容性。 - 正确使用原始字符串避免转义错误(如
\n,\t等)。
🧪 实际案例分析
📌 场景:解析日志文件中的 IP 地址
假设你有一段 Web 日志如下:
192.168.1.10 - - [01/Jun/2025:12:00:00] "GET /index.html HTTP/1.1" 200 1024
10.0.0.5 - - [01/Jun/2025:12:01:00] "GET /about.html HTTP/1.1" 200 512
目标:提取所有 IP 地址
log = '''192.168.1.10 - - [01/Jun/2025:12:00:00] "GET /index.html HTTP/1.1" 200 1024
10.0.0.5 - - [01/Jun/2025:12:01:00] "GET /about.html HTTP/1.1" 200 512'''
lines = log.split('\n')
ips = [line.split()[0] for line in lines]
print(ips)
# 输出:['192.168.1.10', '10.0.0.5']
📌 应用:
- 文本处理
- 日志分析
- 网络安全审计

浙公网安备 33010602011771号