2026-09-23

Python 入门系列(九):字符串与文件——处理真实数据

字符串的八般武艺、f-string 格式化神器,用 with open 读写文件让程序拥有"长期记忆",完成词频统计进阶练习。

字符串与文件:处理真实数据

预计学习时间:55 分钟 · 本系列第 9 / 10 课

一、数据从哪来,到哪去?

前几课的数据都是代码里写死的。真实世界里,数据藏在字符串(网页、消息、日志)和文件(txt、csv、配置文件)里。这一课学两件事:把字符串"揉碎了用",把数据"存下来"。

二、字符串常用方法:八般武艺

s = "  Hello, Python!  "

print(s.strip())          # 去两端空格 → "Hello, Python!"
print(s.upper())          # 全大写
print(s.lower())          # 全小写
print(s.replace("Python", "World"))   # 替换
print(s.count("l"))       # 统计 l 出现几次
print("py" in s.lower())  # 判断包含(注意大小写要先统一)

csv_line = "老魏,18,男"
parts = csv_line.split(",")    # 切开 → ['老魏', '18', '男']
joined = " | ".join(parts)     # 拼回 → 老魏 | 18 | 男

字符串是不可变的!所有方法都不改原字符串,而是返回新字符串。想保留结果必须接住:s = s.strip()。

三、f-string:字符串格式化的现代写法

name, age = "老魏", 18
price = 1234.5678

print(f"{name} 今年 {age} 岁")          # 变量直接嵌进去
print(f"总价:{price:.2f} 元")           # .2f = 保留两位小数
print(f"明年 {age + 1} 岁")              # 括号里可以写表达式
print(f"{name:>10}")                     # 右对齐占10格,做表格很有用
老魏 今年 18 岁
总价:1234.57 元
明年 19 岁
        老魏

四、文件操作:程序的记忆延伸

变量随程序关闭就消失,文件才能长久保存。标准姿势用 with open(...),它会自动帮你关好文件:

# 写文件("w" 模式:覆盖写入)
with open("diary.txt", "w", encoding="utf-8") as f:
    f.write("2026-09-23 晴\n")
    f.write("今天学会了文件操作!\n")

# 追加("a" 模式:接着写,不覆盖)
with open("diary.txt", "a", encoding="utf-8") as f:
    f.write("2026-09-24 又写了一篇\n")

# 读文件("r" 模式)
with open("diary.txt", "r", encoding="utf-8") as f:
    for line in f:          # 一行一行读,文件再大也不怕
        print(line.strip()) # strip 去掉行尾换行符
2026-09-23 晴
今天学会了文件操作!
2026-09-24 又写了一篇

三种模式速记:

  • "r" = read 读(文件不存在会报错)
  • "w" = write 写(清空重写!小心覆盖掉重要文件)
  • "a" = append 追加(在末尾接着写,最安全)

Windows 用户务必写 encoding="utf-8",否则中文可能变成乱码。

程序与文件的数据流:

┌────────────────────┐   write() 写入 ──►   ┌──────────────────┐
│ Python 程序(内存)  │                      │ diary.txt(硬盘) │
│ 关机就没,临时记忆   │  ◄── read() 读出     │ 永久保存,长期记忆 │
└────────────────────┘                      └──────────────────┘

五、实战:记事小本本

while True:
    note = input("记点什么(直接回车结束):")
    if note == "":
        break
    with open("notes.txt", "a", encoding="utf-8") as f:
        f.write(note + "\n")

print("--- 你记过的内容 ---")
with open("notes.txt", "r", encoding="utf-8") as f:
    print(f.read())

六、避坑指南

  • ❌ 用 "w" 打开已有文件 → 原内容瞬间清空。想保留请用 "a"
  • ❌ 读出来每行末尾有 \n → 用 strip() 去掉
  • ❌ 忘了 encoding → Windows 下中文乱码
  • ❌ 字符串方法没接住返回值:s.strip() 单独一行什么都没发生,要 s = s.strip()

七、动手练习

练习:词频统计进阶版。读一个 txt 文件(可以自己先写几段英文进去),统计出现频率最高的 5 个单词。

with open("article.txt", "r", encoding="utf-8") as f:
    text = f.read().lower()

counts = {}
for word in text.split():
    counts[word] = counts.get(word, 0) + 1   # get 带默认值的计数技巧

for word, n in sorted(counts.items(), key=lambda x: -x[1])[:5]:
    print(f"{word}: {n} 次")

新知识:sorted(..., key=lambda x: -x[1]) 按"次数"从大到小排序,[:5] 取前 5 个——列表切片在这里又用上了!

下一课是毕业课:异常处理 + 综合项目,把 9 课知识全部串起来!

← 返回教程列表
顶部