许多人学 Python,一上来先接触的就是“字符串”。 为什么?由于你每天都要跟文本打交道:处理日志、分析数据、爬网页、甚至写个简单的打印语句,背后都离不开字符串。
但是,许多初学者用字符串就停留在最基本的拼接、打印、切片。真正能把字符串用到“飞起”的人,实则不多。 而 Python 贴心地给我们准备了一整套字符串方法,用好了,它们就是写代码时的一把“瑞士军刀”。
今天这篇文章,我想带你系统地走一遍 Python 字符串的常用方法。别担心,我不会把它写成枯燥的官方文档,而是带你像看“秘籍”一样,边看边会心一笑。看完,你会发现: 处理字符串,实则比泡茶还顺手。
一、大小写:文字里的“声调”
我们先从最直观的大小写说起。 人类说话有声调,Python 的字符串也有“声调”。想把文字变大声、变小声、翻转风格,几行代码就搞定。
print("mediaTEA".lower()) # mediatea
print("mediaTEA".upper()) # MEDIATEA
- lower():全变小写,就像你在微信里说“别吵,我小声说”。
- upper():全变大写,瞬间变成“狮吼功”。
那如果你只想让开头有点仪式感呢?
print("hello world".capitalize()) # Hello world
print("hello world".title()) # Hello World
- capitalize():第一个字母大写,其他小写,像正式开会时的开场白。
- title():每个单词首字母都大写,特别像英文书名。
还有两个更有趣的:
print("mediaTEA".swapcase()) # MEDIAtea
print("Straße".casefold()) # strasse
- swapcase():反转大小写,瞬间给人“另一种性格”的感觉。
- casefold():这是“国际友善版”的小写转换,连德语里的 ß 都能搞定。对比大小写时特别好用。
小提示:写爬虫或者做数据清洗时,最常见的操作就是“忽略大小写”。这时候 casefold() 往往比 lower() 更靠谱。
二、查找与统计:在大海里找贝壳
想象你在沙滩上捡贝壳,有时候你要找第一个闪亮的,有时候要找最后一个。Python 给你准备了不同的“放大镜”。
s = "banana"
print(s.find("na")) # 2
print(s.find("na", 3)) # 4
print(s.find("xy")) # -1
- find():找到子串出现的位置,找不到就老实告知你 -1。
- rfind():从右边开始找,像倒着看沙滩。
- index() / rindex():跟上面类似,但更“暴躁”——没找到就直接报错。
再列如,你想知道沙滩上到底有几个贝壳:
print("banana".count("na")) # 2
count() 就是专门干统计的。
这些方法特别适合日志分析,列如查某个关键字出现了多少次,或者定位它的具体位置。
三、拆分与连接:切菜和拌菜
字符串的“拆和合”,就像厨房里的切菜和拌菜。 你可以把它劈开一份份,也可以拌在一起端上桌。
s = "a b c"
print(s.split()) # ['a', 'b', 'c']
print(s.split(" ", 1)) # ['a', 'b c']
print("a b c".rsplit(" ", 1)) # ['a b', 'c']
- split():从左边切。
- rsplit():从右边切。
- splitlines():专门切“换行”的。
再列如:
print("hello mediaTEA world".partition(" "))
# ('hello', ' ', 'mediaTEA world')
print("hello mediaTEA world".rpartition(" "))
# ('hello mediaTEA', ' ', 'world')
- partition() 和 rpartition() 就像夹心饼干,把分隔符和两边的部分都保留下来。
那如果你想把一盘菜重新拼在一起?
words = ["a", "b", "c"]
print("-".join(words)) # a-b-c
join() 就是搅拌器,把食材合成新的一道菜。 写 CSV、生成路径、拼接 SQL 时,它超级常见。
四、判断:做“体检”
有时候你得问问字符串自己:“你身体合格吗?” Python 给它准备了一套“体检表”。
print("abc".isalpha()) # True
print("abc123".isalnum()) # True
print("123".isdigit()) # True
print("123".isdecimal()) # True
print("一二三".isnumeric()) # True
print(" ".isspace()) # True
- isalpha():是不是全字母?
- isdigit() / isdecimal() / isnumeric():是不是数字?区别在于:
- isdigit():数字字符。
- isdecimal():严格的十进制。
- isnumeric():还包括中文“一二三”。
这套检查不止这些,还有:
print("hello".islower()) # True
print("HELLO".isupper()) # True
print("Hello World".istitle()) # True
print("abc".isascii()) # True
print("user_name".isidentifier()) # True
print("Hello
World".isprintable()) # False
这些方法在做输入校验时特别好用,列如:
- 注册用户名只能用字母数字下划线,就要用 isidentifier()。
- 判断文本是不是全英文,用 isascii()。
- 检查是不是全空格,用 isspace()。
五、对齐与填充:排队站好
生活里有个场景:学生合影时,老师总喊“左边一点,右边一点”。 Python 也能帮字符串“排整齐”。
print("hi".ljust(5, "-")) # hi---
print("hi".rjust(5, "-")) # ---hi
print("hi".center(5, "-")) # --hi-
print("42".zfill(5)) # 00042
- ljust():左对齐,右边补。
- rjust():右对齐,左边补。
- center():居中,两边补。
- zfill():专门在前面补 0,常见于编号、日期。
这类方法在输出表格、打印报表、格式化数据时超有用。
六、替换与删除:换装与减肥
字符串也会“换衣服”或者“减肥瘦身”。
s = "apple apple"
print(s.replace("apple", "orange")) # orange orange
print(s.replace("apple", "orange", 1)) # orange apple
- replace():直接替换,可以控制次数。
print("abc def".expandtabs()) # 'abc def'
print("abc def".expandtabs(4)) # 'abc def'
- expandtabs():把 换成空格,适合处理日志。
更灵活的是格式化:
print("Hello, {}!".format("world"))
print("{0} + {0} = {1}".format("a", "2a"))
print("{name} is {age} years old".format(name="mediaTEA", age=7))
- format() 和 format_map() 就像是给字符串穿“定制西装”,随你填参数。
再列如清理:
print(" hello ".strip()) # "hello"
print("..hi..".strip(".")) # "hi"
print("xxhelloxx".lstrip("x")) # "helloxx"
print("xxhelloxx".rstrip("x")) # "xxhello"
print("unhappy".removeprefix("un")) # happy
print("data.csv".removesuffix(".csv")) # data
- strip() / lstrip() / rstrip():去掉头尾的空白或指定字符。
- removeprefix() / removesuffix():精准去前缀或后缀,不改中间内容。
这在处理文件名、清洗 URL 时特别实用。
七、编码与解码:不同语言的翻译官
当你跟不同国家的人交流时,需要翻译官。 字符串在 Python 世界里就是 Unicode,而存储或传输时,必须转成 bytes。
print("你好".encode()) # b'xe4xbdxa0xe5xa5xbd'
print("abc".encode('ascii')) # b'abc'
print("你好".encode('ascii', errors='ignore')) # b''
- encode():把字符串翻译成字节串。
- 参数 errors:可以忽略、替换或报错。
解码的时候,用 decode():
b = b'xe4xbdxa0xe5xa5xbd'
print(b.decode("utf-8")) # 你好
这一块在网络传输、文件保存时必不可少。
八、批量替换:大规模换血
如果你要一次性改掉一堆字符,用 replace() 就显得笨。 这时候 maketrans() + translate() 就像批量操作。
table = str.maketrans("abc", "123")
print("abc cab".translate(table)) # 123 321
table = str.maketrans({"-": "", "_": " "})
print("data-set_v1".translate(table)) # dataset v1
table = str.maketrans({"a": None})
print("banana".translate(table)) # bnn
这招效率高,还能直接删除指定字符。 列如清洗数据、重命名变量时,特别有感觉。
小结:学会“十八般武艺”
到这里,我们几乎走了一遍 Python 字符串的“江湖招式”。 从大小写转换、查找统计,到拆分拼接、替换清理,再到对齐格式化、编码解码,最后是批量替换。
可以说,字符串的方法就是你写 Python 时的“基本功”。 写得多了,你会发现:
- 它们能帮你把许多原本 10 行的代码压缩成 1 行;
- 能让你处理文本的效率翻倍;
- 更重大的是,写出来的代码又简洁又优雅。
就像练武功,剑法刀法枪法都懂一些,你走江湖时才更稳。
如果你看到这里,不妨动手把这些方法亲自敲一遍,试着改改参数,看输出的变化。 熟悉之后,你会发现,Python 的字符串就像一块好钢,越打磨越顺手。
“收藏这篇文章,下次写代码不求人”
- 最新
- 最热
只看作者