Python文件操作

学习时长:2小时 难度:中级 练习:5个

文件操作基础

什么是文件操作?

文件操作是程序开发中的重要组成部分,它允许我们读取和写入文件,实现数据的持久化存储。Python提供了简单而强大的文件操作接口。

文件路径

在Python中,文件路径可以是相对路径或绝对路径:


# 相对路径
file_path = "data/example.txt"

# 绝对路径
file_path = "C:/Users/username/Documents/example.txt"

# 使用原始字符串处理Windows路径
file_path = r"C:\Users\username\Documents\example.txt"
                

文件打开模式

常用文件模式

# 只读模式
file = open('example.txt', 'r')

# 写入模式(覆盖原有内容)
file = open('example.txt', 'w')

# 追加模式
file = open('example.txt', 'a')

# 读写模式
file = open('example.txt', 'r+')
                    
注意事项

打开文件后必须记得关闭文件,否则可能导致资源泄露。推荐使用with语句自动处理文件的关闭。

读写操作

文件读取


# 读取整个文件
with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()

# 逐行读取
with open('example.txt', 'r', encoding='utf-8') as file:
    for line in file:
        print(line.strip())

# 读取指定字节数
with open('example.txt', 'r', encoding='utf-8') as file:
    chunk = file.read(1024)  # 读取1024个字节
                

文件写入


# 写入字符串
with open('example.txt', 'w', encoding='utf-8') as file:
    file.write('Hello, World!\n')
    file.write('这是第二行')

# 写入多行
lines = ['第一行', '第二行', '第三行']
with open('example.txt', 'w', encoding='utf-8') as file:
    file.writelines(line + '\n' for line in lines)
                

上下文管理器

with语句的优势

使用with语句可以自动处理文件的关闭,即使发生异常也能确保文件被正确关闭。


# 不使用with语句
file = open('example.txt', 'r')
try:
    content = file.read()
finally:
    file.close()

# 使用with语句(推荐)
with open('example.txt', 'r') as file:
    content = file.read()
# 文件会自动关闭
                

二进制文件操作

处理图片、音频等二进制文件时,需要使用二进制模式:


# 读取二进制文件
with open('image.jpg', 'rb') as file:
    binary_data = file.read()

# 写入二进制文件
with open('copy.jpg', 'wb') as file:
    file.write(binary_data)
                

练习与实践

练习1:文件复制器

创建一个函数,可以复制文本文件的内容到新文件,并在复制时统计文件的行数和字符数。

提示:使用with语句同时打开两个文件,一个用于读取,一个用于写入。

def copy_file(source_path, target_path):
    """
    复制文件内容并统计信息
    返回元组:(行数, 字符数)
    """
    # 在此编写你的代码
    pass
                    

练习2:日志分析器

编写一个程序,读取日志文件并统计每种日志级别(INFO, WARNING, ERROR)的出现次数。

提示:使用字典来存储统计结果,可以使用字符串的split()方法分割日志行。

def analyze_log(log_file_path):
    """
    分析日志文件,返回各日志级别的统计结果
    返回字典:{'INFO': count, 'WARNING': count, 'ERROR': count}
    """
    # 在此编写你的代码
    pass