返回课程目录

第 06 章 文件与数据格式化

学习目标

  • 打开、读取、写入并关闭文本文件。
  • 区分一维数据和二维数据。
  • 使用分隔符和 CSV 格式保存数据。
  • 处理文件不存在等常见异常。

1. 文件的打开和关闭

file = open("score.txt", "w", encoding="utf-8")
file.write("姓名,成绩\n")
file.write("李明,92\n")
file.close()

常用模式:

  • r:只读,文件不存在时出错。
  • w:覆盖写入,文件不存在时创建。
  • a:在末尾追加。
  • b:二进制模式,可与上述模式组合。

文本文件按字符处理,图像、音频和视频通常按二进制文件处理。处理结束后必须关闭文件。with 可以自动关闭:

with open("score.txt", "r", encoding="utf-8") as file:
    content = file.read()
print(content)

2. 三种读取方式

file = open("score.txt", "r", encoding="utf-8")
print(file.read())
file.close()
  • read():读取全部内容。
  • readline():读取一行。
  • readlines():读取全部行并形成列表。

文件没有 readall() 或 readtext() 方法。

3. 一维数据

一维数据可以用列表表示,并使用分隔符保存:

scores = ["88", "92", "76"]
file = open("scores.txt", "w", encoding="utf-8")
file.write(",".join(scores))
file.close()

file = open("scores.txt", "r", encoding="utf-8")
data = file.read().split(",")
file.close()
print(data)

4. 二维数据和 CSV

二维数据可以看成表格。CSV 用逗号分隔每一列:

rows = [
    ["姓名", "语文", "数学"],
    ["李明", "88", "92"],
    ["王宁", "91", "85"]
]
file = open("students.csv", "w", encoding="utf-8")
for row in rows:
    file.write(",".join(row) + "\n")
file.close()

读回后可以拆分每列:

file = open("students.csv", "r", encoding="utf-8")
for line in file:
    print(line.strip().split(","))
file.close()

5. 安全读写

try:
    file = open("students.csv", "r", encoding="utf-8")
    data = file.readlines()
    file.close()
except FileNotFoundError:
    print("文件不存在")

操作题通常会给出指定文件名。程序应读写题目指定的文件,不能随意改名。

本章练习

  • 把三个姓名写入 names.txt,每行一个姓名。
  • 读取该文件并输出第 2 行。
  • 把成绩列表用逗号连接后写入文件。
  • 读取 CSV 文件,输出第 1 行中的第 2 列。

本章小结

  • r、w、a 分别表示读取、覆盖和追加。
  • 读取完成后要关闭文件,或使用 with 自动关闭。
  • 一维数据可用列表和分隔符处理,二维数据适合 CSV 表格。
  • 文件名、编码和分隔符都必须与题目要求一致。