Python字符串全面指南:从基础到高级

文章目录

  • Python字符串全面指南:从基础到高级
    • 1. 字符串基础概念
    • 2. 字符串的基本操作
      • 2.1 字符串拼接
      • 2.2 字符串索引和切片
    • 3. 字符串常用方法
      • 3.1 大小写转换
      • 3.2 字符串查找和替换
      • 3.3 字符串分割和连接
      • 3.4 字符串格式化
      • 3.5 字符串验证
    • 4. 字符串的不可变性
    • 5. 字符串编码与解码
    • 6. 字符串常用函数
    • 7. 字符串转义字符
    • 8. 字符串格式化高级技巧
      • 8.1 数字格式化
      • 8.2 对齐和填充
    • 9. 字符串实际应用案例
      • 9.1 密码强度检查
      • 9.2 文本处理
    • 10. 字符串方法速查表
    • 总结

Python字符串全面指南:从基础到高级

字符串是Python中最常用的数据类型之一,就像我们日常生活中的文字信息一样。本文将用通俗易懂的方式,结合大量代码示例和图表,带你全面掌握Python字符串的所有重要知识点。

1. 字符串基础概念

字符串就是一串字符的序列,可以包含字母、数字、符号等。在Python中,字符串是用单引号(')或双引号(")括起来的文本。

# 创建字符串的几种方式
name = 'Alice'
greeting = "Hello, World!"
# 如果在前面加个f相当于javascript中的模版字符串,字符串格式化中会讲
multiline = """这是一个
多行字符串"""

2. 字符串的基本操作

2.1 字符串拼接

操作 描述 示例 结果
+ 连接字符串 “Hello” + “World” “HelloWorld”
* 重复字符串 “Hi” * 3 “HiHiHi”
# 字符串拼接示例
first_name = "张"
last_name = "三"
full_name = first_name + last_name  # "张三"

stars = "*" * 10  # "**********"

2.2 字符串索引和切片

字符串中的每个字符都有一个位置索引(从0开始):

 H  e  l  l  o  ,     W  o  r  l  d  !
0  1  2  3  4  5  6  7  8  9 10 11 12
text = "Hello, World!"

# 索引
print(text[0])   # 'H' (第一个字符)
print(text[-1])  # '!' (最后一个字符)

# 切片 [开始:结束:步长]
print(text[7:12])  # 'World' (7到11索引)
print(text[:5])    # 'Hello' (开始到4索引)
print(text[::2])   # 'Hlo ol!' (每隔一个字符)

3. 字符串常用方法

3.1 大小写转换

方法 描述 示例 结果
lower() 转小写 “HELLO”.lower() “hello”
upper() 转大写 “hello”.upper() “HELLO”
capitalize() 首字母大写 “hello”.capitalize() “Hello”
title() 每个单词首字母大写 “hello world”.title() “Hello World”
swapcase() 大小写互换 “Hello”.swapcase() “hELLO”
# 大小写转换示例
message = "Python is FUN"
print(message.lower())   # "python is fun"
print(message.upper())   # "PYTHON IS FUN"
print(message.title())   # "Python Is Fun"

3.2 字符串查找和替换

方法 描述 示例 结果
find() 查找子串位置 “hello”.find(“e”) 1
index() 类似find()但找不到时报错 “hello”.index(“e”) 1
count() 统计子串出现次数 “hello”.count(“l”) 2
replace() 替换子串 “hello”.replace(“l”,“x”) “hexxo”
# 查找和替换示例
text = "Python编程很有趣,Python也很强大"

print(text.find("Python"))    # 0 (第一次出现的位置)
print(text.count("Python"))   # 2 (出现次数)
print(text.replace("Python", "Java"))  # 替换所有Python为Java

3.3 字符串分割和连接

方法 描述 示例 结果
split() 按分隔符分割字符串 “a,b,c”.split(“,”) [‘a’,‘b’,‘c’]
join() 连接字符串列表 “,”.join([‘a’,‘b’,‘c’]) “a,b,c”
partition() 按分隔符分成三部分 “hello”.partition(“e”) (‘h’,‘e’,‘llo’)
# 分割和连接示例
data = "苹果,香蕉,橙子"
fruits = data.split(",")  # ['苹果','香蕉','橙子']

new_data = "|".join(fruits)  # "苹果|香蕉|橙子"

3.4 字符串格式化

Python提供了多种字符串格式化方法:

# 1. %格式化 (旧式)
name = "李四"
age = 25
print("我叫%s,今年%d岁" % (name, age))

# 2. format()方法 (推荐)
print("我叫{},今年{}岁".format(name, age))
print("我叫{0},今年{1}岁,{0}很高兴认识你".format(name, age))

# 3. f-string (Python 3.6+ 最推荐)
print(f"我叫{name},今年{age}岁")
print(f"明年我就{age + 1}岁了")

3.5 字符串验证

方法 描述 示例 结果
isdigit() 是否全数字 “123”.isdigit() True
isalpha() 是否全字母 “abc”.isalpha() True
isalnum() 是否字母或数字 “abc123”.isalnum() True
isspace() 是否全空白字符 " ".isspace() True
startswith() 是否以某子串开头 “hello”.startswith(“he”) True
endswith() 是否以某子串结尾 “hello”.endswith(“lo”) True
# 验证用户输入
user_input = input("请输入年龄: ")
if user_input.isdigit():
    age = int(user_input)
    print(f"你的年龄是{age}岁")
else:
    print("请输入有效的数字年龄")

4. 字符串的不可变性

字符串是不可变的,这意味着一旦创建就不能修改其中的字符:

text = "hello"
# text[0] = "H"  # 这会报错!

# 正确做法是创建新字符串
new_text = "H" + text[1:]  # "Hello"

5. 字符串编码与解码

Python 3中字符串默认使用Unicode编码:

# 编码:字符串 → 字节
text = "你好"
byte_data = text.encode("utf-8")  # b'\xe4\xbd\xa0\xe5\xa5\xbd'

# 解码:字节 → 字符串
new_text = byte_data.decode("utf-8")  # "你好"

6. 字符串常用函数

除了方法外,Python还有一些内置函数可以操作字符串:

函数 描述 示例 结果
len() 字符串长度 len(“hello”) 5
str() 转换为字符串 str(123) “123”
ord() 获取字符的Unicode码 ord(“A”) 65
chr() 根据Unicode码获取字符 chr(65) “A”
# 常用函数示例
password = "abc123"
if len(password) < 6:
    print("密码太短,至少需要6个字符")

# ASCII码转换
print(ord("A"))  # 65
print(chr(97))   # 'a'

7. 字符串转义字符

转义字符以反斜杠\开头,表示特殊字符:

转义字符 描述 示例 结果
\n 换行 print(“a\nb”) a
b
\t 制表符 print(“a\tb”) a b
\\ 反斜杠 print(“\”) \
" 双引号 print(“”") "
单引号 print(‘’')
# 转义字符示例
print("第一行\n第二行")
'''
第一行
第二行
'''
print("路径: C:\\Users\\Name") # 路径: C:\Users\Name
print('他说:\"你好\"') # 他说:"你好"

8. 字符串格式化高级技巧

8.1 数字格式化

# 保留小数位数
pi = 3.1415926
print(f"π的值是{pi:.2f}")  # "π的值是3.14"

# 千位分隔符
number = 1000000
print(f"{number:,}")  # "1,000,000"

# 百分比
score = 0.85
print(f"正确率:{score:.1%}")  # "正确率:85.0%"

8.2 对齐和填充

text = "Python"

# 左对齐,宽度10,填充*
print(f"{text:*<10}")  # "Python****"

# 右对齐,宽度10,填充空格
print(f"{text:>10}")   # "    Python"

# 居中对齐,宽度10,填充-
print(f"{text:-^10}")  # "--Python--"

9. 字符串实际应用案例

9.1 密码强度检查

password = input("设置密码: ")

has_upper = any(c.isupper() for c in password)
has_lower = any(c.islower() for c in password)
has_digit = any(c.isdigit() for c in password)
has_special = any(not c.isalnum() for c in password)

strength = 0
if len(password) >= 8: strength += 1
if has_upper: strength += 1
if has_lower: strength += 1
if has_digit: strength += 1
if has_special: strength += 1

print(f"密码强度(1-5): {strength}")

9.2 文本处理

# 统计文章中单词出现频率
text = """Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。
Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。"""

# 去除标点符号
import string
clean_text = text.translate(str.maketrans("", "", string.punctuation))

# 分割单词并统计
words = clean_text.lower().split()
word_count = {}
for word in words:
    word_count[word] = word_count.get(word, 0) + 1

print("单词频率:", word_count)

10. 字符串方法速查表

以下是Python字符串所有方法的快速参考:

方法 描述 示例
s.capitalize() 首字母大写 “hello”.capitalize() → “Hello”
s.casefold() 更彻底的小写转换(适合比较) “ß”.casefold() → “ss”
s.center(width[, fillchar]) 居中填充 “hi”.center(5,“-”) → “–hi–”
s.count(sub[, start[, end]]) 统计子串出现次数 “hello”.count(“l”) → 2
s.encode([encoding[, errors]]) 编码为字节 “你好”.encode(“utf-8”) → b’…’
s.endswith(suffix[, start[, end]]) 是否以某子串结尾 “hello”.endswith(“lo”) → True
s.expandtabs([tabsize]) 替换制表符为空格 “a\tb”.expandtabs(4) → “a b”
s.find(sub[, start[, end]]) 查找子串位置(找不到返回-1) “hello”.find(“e”) → 1
s.format(*args, **kwargs) 格式化字符串 “{}”.format(“hi”) → “hi”
s.format_map(mapping) 类似format()但使用字典 “{name}”.format_map({“name”:“Alice”}) → “Alice”
s.index(sub[, start[, end]]) 类似find()但找不到时报错 “hello”.index(“e”) → 1
s.isalnum() 是否字母或数字 “abc123”.isalnum() → True
s.isalpha() 是否全字母 “abc”.isalpha() → True
s.isascii() 是否ASCII字符 “abc”.isascii() → True
s.isdecimal() 是否十进制数字 “123”.isdecimal() → True
s.isdigit() 是否数字字符 “¹”.isdigit() → True
s.isidentifier() 是否有效标识符 “var1”.isidentifier() → True
s.islower() 是否全小写 “hello”.islower() → True
s.isnumeric() 是否数字字符 “Ⅷ”.isnumeric() → True
s.isprintable() 是否可打印字符 “a”.isprintable() → True
s.isspace() 是否全空白字符 " ".isspace() → True
s.istitle() 是否标题化(每个单词首字母大写) “Hello World”.istitle() → True
s.isupper() 是否全大写 “HELLO”.isupper() → True
s.join(iterable) 连接字符串序列 “,”.join([“a”,“b”]) → “a,b”
s.ljust(width[, fillchar]) 左对齐填充 “hi”.ljust(5) → "hi "
s.lower() 转换为小写 “HELLO”.lower() → “hello”
s.lstrip([chars]) 去除左侧空白或指定字符 " hi".lstrip() → “hi”
s.maketrans(x[, y[, z]]) 创建字符映射表 str.maketrans(“ab”,“12”)
s.partition(sep) 按分隔符分成三部分 “hello”.partition(“e”) → (‘h’,‘e’,‘llo’)
s.replace(old, new[, count]) 替换子串 “hello”.replace(“l”,“x”) → “hexxo”
s.rfind(sub[, start[, end]]) 从右查找子串位置 “hello”.rfind(“l”) → 3
s.rindex(sub[, start[, end]]) 类似rfind()但找不到时报错 “hello”.rindex(“l”) → 3
s.rjust(width[, fillchar]) 右对齐填充 “hi”.rjust(5) → " hi"
s.rpartition(sep) 从右分割成三部分 “hello”.rpartition(“l”) → (‘hel’,‘l’,‘o’)
s.rsplit([sep[, maxsplit]]) 从右分割字符串 “a b c”.rsplit(maxsplit=1) → [‘a b’,‘c’]
s.rstrip([chars]) 去除右侧空白或指定字符 "hi ".rstrip() → “hi”
s.split([sep[, maxsplit]]) 分割字符串 “a,b,c”.split(“,”) → [‘a’,‘b’,‘c’]
s.splitlines([keepends]) 按行分割 “a\nb”.splitlines() → [‘a’,‘b’]
s.startswith(prefix[, start[, end]]) 是否以某子串开头 “hello”.startswith(“he”) → True
s.strip([chars]) 去除两侧空白或指定字符 " hi ".strip() → “hi”
s.swapcase() 大小写互换 “Hello”.swapcase() → “hELLO”
s.title() 每个单词首字母大写 “hello world”.title() → “Hello World”
s.translate(table) 按映射表转换字符 “abc”.translate({97: “x”}) → “xbc”
s.upper() 转换为大写 “hello”.upper() → “HELLO”
s.zfill(width) 左侧填充0 “42”.zfill(5) → “00042”

总结

Python字符串要点回顾:

  1. 创建字符串:使用单引号、双引号或三引号
  2. 基本操作:拼接(+)、重复(*)、索引和切片
  3. 常用方法:大小写转换、查找替换、分割连接等
  4. 格式化:f-string是最推荐的现代格式化方法
  5. 不可变性:字符串创建后不能修改,只能创建新字符串
  6. 编码解码:处理不同字符编码时需要转换
  7. 实用技巧:转义字符、数字格式化、对齐填充等

掌握这些字符串知识,你就能高效地处理各种文本数据和字符串操作了!字符串是编程中最基础也是最重要的数据类型之一,值得花时间深入学习。

你可能感兴趣的:(python,python,开发语言)