Python3 字符串

Python3 字符串(String)


🎯 学习目标

掌握 Python 中字符串的基本操作、格式化方法、编码处理及常见应用场景,理解字符串的不可变性与常用方法。能够在实际项目中灵活使用字符串进行数据处理、文件读写、网络通信等任务。


🔑 核心重点

分类 内容
基本定义 单引号、双引号、三引号定义字符串
不可变性 字符串一旦创建,不能修改内容
操作方法 切片、拼接、查找、替换、大小写转换、去除空格等
格式化方式 f-string.format()% 格式化
编码与解码 strbytes 的转换,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']

📌 应用

  • 文本处理
  • 日志分析
  • 网络安全审计

🧩 拓展练习(动手实践)

  1. 编写一个函数 reverse_string(s),将输入字符串反转后返回。
  2. 输入一段英文句子,统计其中每个单词出现的次数。
  3. 将用户输入的手机号格式化为 (XXX) XXX-XXXX 形式。
  4. 编写程序读取本地日志文件,提取并打印所有状态码为 404 的请求。
  5. 使用 f-string 格式化输出学生成绩表,包含姓名、成绩、排名等信息。

📚 推荐阅读


🧭 下一步建议

  • 下一章学习内容:《Python 列表(List)详解》
  • 掌握列表的增删改查、切片、嵌套等操作
  • 学习列表推导式、排序、合并等高级技巧
  • 结合字符串与列表知识,尝试编写文本处理工具
  • 学习使用 PyCharm 调试器观察字符串处理流程

如果你希望我为你提供:

  • 字符串格式化模板汇总 PDF
  • 更多实战项目练习题(如密码强度检测、日志分析器、自动报告生成器等)
  • re 模块(正则表达式)基础与实战教学
  • 字符串性能优化技巧(如 join vs +)
  • 视频教学资源推荐(中文讲解)

欢迎随时告诉我 😊

非常好!你提到的 rR 前缀(即 原始字符串)确实也是 Python 中用于字符串处理的重要运算符之一。下面是对《Python3 的字符串运算符详解》的完整整理版本,包含所有常见字符串运算符,并对每个进行详细说明:


🧮 Python3 的字符串运算符详解

一、引言

在 Python 中,字符串支持多种运算符,这些运算符可以帮助我们高效地完成字符串拼接、查找、重复、索引等操作。理解这些运算符的作用和使用方法,是掌握 Python 字符串处理能力的关键。


二、Python3 常见字符串运算符一览表

运算符 描述 示例
+ 拼接两个字符串 "Hello" + "World" → "HelloWorld"
* 重复字符串指定次数 "Hi" * 3 → "HiHiHi"
in 判断子串是否存在于字符串中 'a' in 'abc' → True
not in 判断子串是否不存在于字符串中 'z' not in 'abc' → True
[ ] 索引访问或切片操作 "Python"[1] → 'y', "Python"[2:5] → 'tho'
rR 原始字符串(raw string),不转义特殊字符 r"C:\new\text.txt" → C:\new\text.txt

三、逐项详解

✅ 1. 字符串拼接运算符:+

将两个字符串连接在一起,生成一个新的字符串。

s1 = "Hello"
s2 = "World"
print(s1 + s2)  # 输出:HelloWorld

📌 注意:不能直接拼接非字符串类型,需先转换为字符串。

name = "Alice"
age = 25
# 错误写法:
# print(name + " is " + age + " years old.")
# 正确写法:
print(name + " is " + str(age) + " years old.")

推荐使用 f-string 替代:

print(f"{name} is {age} years old.")  # 更简洁

✅ 2. 字符串重复运算符:*

将字符串重复指定的次数,生成新的字符串。

line = "-" * 40
print(line)
# 输出:----------------------------------------

📌 常用于生成分隔线、占位符等场景。


✅ 3. 成员判断运算符:in / not in

用于判断一个字符串是否包含另一个子串,返回布尔值。

text = "Welcome to the Python world"

print("Python" in text)      # True
print("Java" not in text)    # True

📌 非常适合做文本过滤、关键词匹配等任务。


✅ 4. 索引与切片运算符:[ ]

  • 单个索引获取字符(从 0 开始)
  • 使用切片语法提取子串:[start:end:step]
  • 支持负数索引(从后往前)
s = "Python"

print(s[0])       # P
print(s[-1])      # n
print(s[1:4])     # yth
print(s[:3])      # Pyt
print(s[3:])      # hon
print(s[::-1])    # nohtyP (反转字符串)

📌 切片操作非常灵活,是字符串处理中的常用工具。


✅ 5. 原始字符串前缀:rR

在字符串前加上 rR,表示这是一个“原始字符串”,不会对其中的反斜杠 \ 转义字符进行处理。

path = r"C:\new\text.txt"
print(path)  # 输出:C:\new\text.txt

如果不加 r\n 会被解释为换行符:

bad_path = "C:\new\text.txt"
print(bad_path)
# 输出:
# C:
# ew	ext.txt

📌 常用于以下场景:

  • 文件路径(Windows 下路径含有 \
  • 正则表达式(正则中大量使用 \d\w 等)
  • 匹配特殊字符时避免多重转义

四、注意事项与性能建议

事项 说明
❗字符串不可变性 所有字符串操作都会返回新字符串,原字符串不变。
⚠️频繁拼接建议用 join() 不推荐使用 + 多次拼接,应使用 str.join() 提高性能。
🔒编码问题 处理非 ASCII 字符时注意编码格式(如 UTF-8)。
📦原始字符串适用场景 Windows 路径、正则表达式、日志分析等需要保留原始字符的场合。

✅ 推荐写法:拼接多个字符串

words = ["apple", "banana", "cherry"]
result = " ".join(words)
print(result)  # apple banana cherry

五、总结

运算符 用途
+ 拼接字符串
* 重复字符串
in / not in 判断子串是否存在
[ ] 索引与切片
r / R 定义原始字符串,避免转义

熟练掌握这些字符串运算符,可以让你更高效地处理文本数据,无论是构建动态内容、解析日志文件还是编写网络爬虫,都能游刃有余。


六、拓展练习

  1. 编写代码,使用 r 字符串定义一个正则表达式,匹配邮箱地址。
  2. 使用 in 和循环,检查一段英文文本中是否包含敏感词。
  3. join() 方法拼接列表中的字符串,对比与 + 拼接的性能差异。
  4. 编写函数,利用切片实现字符串翻转,并测试效率。
  5. 创建一个多行菜单界面,使用 *+ 动态生成边框与标题。

如果你希望我为你提供:

  • 字符串运算符速查 PDF
  • 原始字符串与正则表达式实战教程
  • 字符串处理性能优化技巧汇总
  • 练习题答案参考文档

欢迎随时告诉我 😊

posted @ 2025-05-28 00:03  红尘过客2022  阅读(40)  评论(0)    收藏  举报