Python 字符串是编程中最常用的数据类型之一,掌握其操作对编写高效代码至关重要。本文从基本创建到高级应用,涵盖索引切片、常用方法、格式化、性能优化等核心内容,并提供实际场景示例。
### 字符串的创建与基本操作
字符串由单引号、双引号或三引号创建。例如:- str1 = 'Hello, World!'
- str2 = "Python 字符串"
- str3 = '''多行
- 字符串'''
- empty = ""
复制代码 字符串可以通过 `+` 连接,`*` 重复,`len()` 获取长度。- first = "张"
- last = "三"
- full = first + last # 张三
- line = "-" * 20 # 20个横线
- print(len("Hello, Python!")) # 14
复制代码
### 索引与切片
正向索引从0开始,负向从-1开始。- text = "Python"
- print(text[0]) # P
- print(text[-1]) # n
复制代码 切片格式 `[start:stop:step]`,省略start默认0,stop默认末尾。- text = "Hello, Python!"
- print(text[0:5]) # Hello
- print(text[7:13]) # Python
- print(text[::-1]) # 反转字符串
复制代码
### 常用方法:大小写、查找、替换、分割、连接
大小写转换包括 `lower()`、`upper()`、`title()`、`capitalize()`、`swapcase()`。查找替换用 `find()`(未找到返回-1)、`index()`(未找到抛异常)、`replace()`。- text = "Python is powerful. Python is easy."
- print(text.find("Java")) # -1
- new = text.replace("Python", "Java")
复制代码 去除空白用 `strip()`、`lstrip()`、`rstrip()`。分割用 `split()`,连接用 `join()`。- csv = "apple,banana"
- fruits = csv.split(",") # ['apple','banana']
- joined = "-".join(fruits) # apple-banana
复制代码
### 字符串格式化:%、format()、f-string
传统 `%` 格式化:- print("姓名:%s,年龄:%d" % ("张三", 25))
复制代码 `format()` 支持位置和关键字参数:- print("姓名:{},年龄:{}".format("李四", 30))
- print("圆周率:{:.2f}".format(3.14159))
复制代码 Python 3.6+ 推荐 f-string:- name = "王五"
- age = 28
- print(f"姓名:{name},明年{age+1}岁")
- print(f"身高:{1.75:.2f}米")
复制代码
### 字符串检查方法
`isalnum()`、`isalpha()`、`isdigit()`、`isupper()`、`islower()`、`istitle()`、`isspace()`、`isascii()` 等用于类型判断。- print("Python123".isalnum()) # True
- print("12345".isdigit()) # True
- print("HELLO".isupper()) # True
复制代码
### 转义字符与原始字符串
常用转义:`\n` 换行,`\t` 制表符,`\"` 双引号,`\\` 反斜杠。原始字符串(`r`前缀)避免转义,常用于路径和正则。- path = r"C:\Users\Documents\file.txt"
- print(path)
复制代码
### 编码与解码
字符串转字节用 `encode()`,字节转字符串用 `decode()`,需指定编码(如 UTF-8、GBK)。- text = "你好,世界!"
- utf8_bytes = text.encode("utf-8")
- print(utf8_bytes.decode("utf-8"))
复制代码
### 性能优化与常见陷阱
大量字符串连接时,使用 `join()` 替代 `+`,因为字符串不可变,`+` 会不断创建新对象。- # 推荐
- parts = []
- for i in range(10000):
- parts.append(str(i))
- result = "".join(parts)
复制代码 子串检查用 `in` 而非 `find()`:- if "Python" in text:
- print("包含")
复制代码
### 实战示例
数据清洗:去除首尾和多余空格,首字母大写。- def clean_string(text):
- text = text.strip()
- text = " ".join(text.split())
- return text.capitalize()
- print(clean_string(" python 教程 ")) # Python 教程
复制代码 密码强度检查:综合长度、大小写、数字、特殊字符。- def check_password_strength(pwd):
- if len(pwd) < 8:
- return "太短"
- has_upper = any(c.isupper() for c in pwd)
- has_lower = any(c.islower() for c in pwd)
- has_digit = any(c.isdigit() for c in pwd)
- has_special = any(not c.isalnum() for c in pwd)
- score = sum([has_upper, has_lower, has_digit, has_special])
- return ["弱","中","强"][min(score,2)]
- print(check_password_strength("Abc123!@#")) # 强
复制代码 提取文件扩展名:使用 `rsplit` 分割一次。- def get_extension(filename):
- if "." not in filename:
- return ""
- parts = filename.rsplit(".", 1)
- return parts[1].lower()
- print(get_extension("document.PDF")) # pdf
复制代码
掌握这些操作,可以高效处理文本数据。记住:字符串不可变,f-string 最简洁,`join()` 优于 `+`,编码明确指定。 |