昨天我们学了元组和集合,知道了什么是"不可变"以及怎么快速去重。今天的内容更贴近日常:字符串操作。
不管你是爬虫、数据分析,还是写 Web 应用,80% 以上的场景都在跟文本打交道。把字符串操作用熟了,写代码的效率能提升一大截。
一、字符串就是文本
先理清一个最基本的概念。在 Python 里,字符串就是一串字符,用单引号或双引号包起来都行。
name = '张三'city = "北京"
单引号双引号没区别,唯一的坑是:如果你字符串里本身有单引号,外面就用双引号,反过来也一样。
sentence = "我说:'今天天气不错'"
如果是长文本,三引号是你的好朋友:
long_text = """这是第一行这是第二行这是第三行"""
二、字符串拼接——把内容串起来
最直观的方式是用 +:
first = "张"last = "三"full = first + last # "张三"
但如果你想在中间加空格或标点,重复写 + 很烦人。推荐用 f-string:
name = "张三"age = 25# f-string,Python 3.6+ 可用info = f"我叫{name},今年{age}岁"print(info) # 输出:我叫张三,今年25岁
花括号里可以直接写变量名,甚至写表达式:
price = 9.9count = 3total = f"总价:{price * count}元"print(total) # 输出:总价:29.7元
以前我还用过 % 格式化和 format() 方法,但自从有了 f-string,我基本只用它了。简单直接。
三、字符串索引与切片——取某一段
字符串可以理解成"字符组成的列表",所以能用下标取单个字符:
text = "Hello Python"print(text[0]) # 输出:H(下标从0开始)print(text[6]) # 输出:P(空格占1位)print(text[-1]) # 输出:n(-1表示倒数第一个)
切片是 Python 的特色语法,用一个冒号取子串:
text = "Hello Python"print(text[0:5]) # 输出:Hello(取下标0到4,左闭右开)print(text[6:]) # 输出:Python(从6到最后)print(text[:5]) # 输出:Hello(从头到5)print(text[-6:]) # 输出:Python(取后6个字符)
记法:[start:end],取 start 到 end-1 这一段。第二个不写就取到底,第一个不写就从开头取。
四、常用字符串方法——干活就靠这些
Python 的字符串方法非常丰富,下面这几个是日常最高频的。
去掉空白字符
从用户输入或者文件里读数据,经常带着多余的空格和换行。
raw = " Hello World \n"print(raw.strip()) # "Hello World"(去掉首尾空白)print(raw.lstrip()) # "Hello World \n"(去掉左边空白)print(raw.rstrip()) # " Hello World"(去掉右边空白)
记住 strip(),几乎每个处理文本的程序都会用到。
分割与合并
一个字符串按某个分隔符拆成列表,或者反过来说,把列表拼成字符串。
# 分割data = "apple,banana,orange"fruits = data.split(",")print(fruits) # ['apple', 'banana', 'orange']# 合并fruits = ['apple', 'banana', 'orange']text = ", ".join(fruits)print(text) # "apple, banana, orange"
join 的写法有点反直觉——它是字符串的方法,不是列表的方法。"分隔符".join(列表),记住这个顺序就行。
查找与替换
text = "Hello World, Hello Python"# 查找子串位置print(text.find("World")) # 输出:6(下标从0开始)print(text.find("Java")) # 输出:-1(没找到)# 是否包含print("Hello"in text) # Trueprint("Java"notin text) # True# 替换new_text = text.replace("Hello", "你好")print(new_text) # "你好 World, 你好 Python"
find 和 in 的区别:in 只返回 True/False,find 返回位置下标。判断有没有某个词用 in,想知道在哪用 find。
大小写转换
text = "hello python"print(text.upper()) # "HELLO PYTHON"print(text.capitalize()) # "Hello python"(首字母大写)print(text.title()) # "Hello Python"(每个单词首字母大写)
判断内容
print("123".isdigit()) # Trueprint("abc".isalpha()) # Trueprint("abc123".isalnum()) # True(字母或数字)print(" ".isspace()) # True(全是空白字符)
这些判断方法在数据清洗时特别有用——比如判断用户输入的是不是纯数字,或者过滤掉空行。
五、转义字符——特殊符号怎么表示
当你想在字符串里放引号、换行、Tab,就要用到转义字符:
# 换行print("第一行\n第二行")# 输出:# 第一行# 第二行# Tabprint("a\tb")# 输出:a b# 反斜杠本身print("C:\\Users\\张三")# 输出:C:\Users\张三# 原始字符串(推荐文件路径用这个)print(r"C:\Users\张三")# 输出:C:\Users\张三(加 r 就不需要转义了)
文件路径我每次都写成原始字符串(前面加 r),省得被反斜杠坑。
六、一个真实的场景——清洗用户手机号
把零散的知识点串起来,看一个实际例子。假设用户输入了一个手机号,里面可能带了空格、短横线或者加号前缀,我们要清洗成纯数字:
raw_input = " +86 138-1234-5678 "defclean_phone(phone_str):# 去掉首尾空白 phone = phone_str.strip()# 去掉可能存在的国际区号if phone.startswith("+86"): phone = phone[3:]# 去掉所有空格和短横线 phone = phone.replace(" ", "").replace("-", "")return phoneresult = clean_phone(raw_input)print(result) # 输出:13812345678
这一串操作里,用了 strip、startswith、切片、replace——都是今天讲的方法。把这些基础方法组合起来,就能处理很多实际问题。
小结
今天的内容比较多,但全是干货。记不住的不用硬背,写代码时多查几次自然就熟了。重点记住这几个:
字符串操作是 Python 里最常用的技能之一。多练几次,你会发现自己在不知不觉中就用得很熟练了。
下一篇:Day 8 —— 函数——把重复代码封起来