用 Python 操作文件

AI产品经理需要撰写大量的技术文档、报表或会议记录,通过Python可以自动生成一些模板化文档,提升效率。在这部分课程中,我们将开始学习如何使用Python来生成文档、自动化处理文档和其他相关的开发知识。

在本节课程中,我们将先来学习如何用 Python 操作文件。在学习如何操作文件后,我们可以将这些技能应用到文档生成中,比如创建动态模板化报告。在企业项目中,文件操作是非常常见的任务,比如读取日志文件检查内容、生成自动化报表或保存用户输入的数据、更新配置文件或批量处理数据。

对人类来说,阅读文件是一个直观的过程:打开文件,快速浏览文字内容;而对计算机而言,处理文件需要按特定步骤操作,包括打开文件、读取或写入数据、然后关闭文件。如果程序在未关闭文件的情况下终止,可能导致数据丢失或文件被锁定。因此,我们需要在编程中确保数据完整性和资源释放。通过 Python,我们可以用简单的代码快速、高效地完成这些任务,并准确地控制文件的每一步操作。

Python 文件操作的基础

Python 提供了一组专门用来操作文件的内置函数,这些函数是你的程序与文件进行交互的强大工具,主要包括:

  • 打开文件:open()
  • 读取文件内容:read()readlines()
  • 写入文件:write()
  • 关闭文件:close() 或使用上下文管理器 with 自动关闭文件。

注意:文件操作中,可能会遇到文件不存在或权限不足的问题,因此我们也需要了解如何处理这些情况。

1. 打开文件

我们使用 open() 函数打开文件,指定文件名和模式。模式包括:

  • r:以只读模式打开(默认)。
  • w:以写入模式打开,会清空文件内容。
  • a:以追加模式打开,向文件末尾添加内容。
  • rbwb:以二进制模式读取或写入文件(适用于图片、视频等)。

示例1:

# 打开文件
file = open("example.txt", "r") # 以只读模式打开文件
print(file.read()) # 读取并打印文件内容
file.close() # 关闭文件

示例2:图片(二进制文件)的复制。

# 使用上下文管理器打开两个文件
# 打开 source.jpg 文件,读取其内容,以二进制模式 ("rb") 打开
# 打开 copy.jpg 文件,准备写入内容,以二进制模式 ("wb") 打开i
with open("source.jpg", "rb") as src, open("copy.jpg", "wb") as dst:# 从 src 文件中读取所有内容,并将其写入到 dst 文件中
    dst.write(src.read()) 
    # src.read():读取源文件中的所有二进制数据
    # dst.write():将这些数据写入目标文件中

2. 读取文件内容

Python 提供了多种方法读取文件内容:

  • 一次性读取整个文件:read()
  • 按行读取:readlines() 会返回每一行组成的列表。
  • 逐行读取:使用 for 循环逐行处理。

示例:

# 读取文件的三种方法
with open("example.txt", "r") as file:
    # 方法 1:一次性读取件
    print(file.read()) 

with open("example.txt", "r") as file:
    # 方法 2:按行读取
    print(file.readlines()) 

with open("example.txt", "r") as file:
    # 方法 3:逐行读取
    for line in file:
        print(line.strip()) # 去掉末尾的换行符

3. 写入文件

写入文件时,可以使用 w 模式或 a 模式:

  • w 模式会清空文件内容后写入新内容。
  • a 模式会在文件末尾追加内容。

示例:

# 写入新内容
with open("example.txt", "w") as file:
    file.write("这是一段新的内容。\n")

# 追加内容
with open("example.txt", "a") as file:
    file.write("这是一段追加的内容。\n")

4. 文件关闭与上下文管理器

为了避免文件忘记关闭或程序中断导致资源被占用,推荐使用上下文管理器 with,它会自动关闭文件。

示例:

# 使用上下文管理器自动关闭文件
with open("example.txt", "r") as file:
    content = file.read()
    print(content)

5. 文件路径的操作

默认情况下,open() 会在当前工作目录下寻找文件。我们也可以指定文件的完整路径:

  • 使用相对路径(如 ./data/file.txt)。
  • 使用绝对路径(如 C:/Documents/file.txt)。


此外,可以结合 os 模块处理文件路径:

import os

# 获取当前目录
print(os.getcwd())

# 拼接路径
file_path = os.path.join("data", "example.txt")
print(file_path)

6. 处理文件操作中的异常

在文件操作中,可能会遇到一些常见错误,比如文件不存在。我们可以用 try-except 捕获异常,确保程序不会因为错误中断。

示例:

try:
    with open("nonexistent.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    print("文件不存在,请检查文件名或路径。")

示例项目:统计文件中的单词数量

现在,假如我们想编写一个程序,读取某个英文文本文件(例如:example.txt)中的内容,并统计其中的单词数量。注意,这个文件可能不存在,因此你需要考虑这种异常情况。

你可以用学到的知识来尝试自己撰写这个程序。但是作为产品经理,你也可以用大语言模型直接生成代码。这时候你只需要输入类似下面的提示词:

提示词:

请帮我以一名Python初学者的水准,编写一个程序,读取指定英文文本文件:example.txt中的内容,并统计其中的单词数量。请尽可能使代码简单,并使用初学者能掌握的函数和方法。请考虑文件可能不存在的异常情况,并为代码撰写清晰的注释。

代码示例:
# 统计文件中的单词数量
file_name = "example.txt"

try:
    # 尝试打开文件
    with open(file_name, "r") as file:
        content = file.read() # 读取文件内容
        words = content.split() # 将内容按空格分割成单词
        print(f"文件 '{file_name}' 中有 {len(words)} 个单词。")
except FileNotFoundError:
    # 如果文件不存在,打印错误信息
    print(f"文件 '{file_name}' 不存在。")

输出示例:

文件 'example.txt' 中有 42 个单词。

以上示例是假设正在处理一个英文文本。但实际处理文件时经常会遇到编码问题,尤其是在处理非英文文本时。此时可能要考虑指定文件编码。这是一个示例:

# 使用上下文管理器打开一个文本文件,并指定编码格式为 UTF-8 with open("example.txt", "r", encoding="utf-8") as file:
    print(file.read()) # 读取文件内容并打印

通过明确地指定文件编码(如 UTF-8),我们可以避免编码不匹配导致的问题,特别是在处理非英文文本时,这是文件操作中的重要技巧。无论是读取还是写入文件,指定编码都是一个良好的编程习惯。

练习:

  1. 创建一个文件 my_notes.txt,写入三句话。
  2. 读取文件内容,并打印每一行的行号和内容。
  3. 批量向文件中追加一组数字(如 1 到 10,每行一个数字)。

你可以自己尝试撰写,也可以设计自己的提示词,让大语言模型帮你完成这3个编程任务。试着比较你们写的内容有什么不同。

AI 助教

提示:您可在此提出学习中遇到的问题。回答由 AI 生成,可能存在错误,请注意甄别。