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']

📌 应用:

  • 文本处理
  • 日志分析
  • 网络安全审计
posted @ 2025-05-28 00:03  红尘过客2022  阅读(135)  评论(0)    收藏  举报