杰瑞科技汇

Python读写文件代码示例

目录

  1. 基础概念

    Python读写文件代码示例-图1
    (图片来源网络,侵删)
    • 文件路径
    • 核心函数:open()
    • 文件对象的方法
    • 最佳实践:使用 with 语句
  2. 读取文件

    • 读取整个文件内容
    • 逐行读取
    • 读取指定数量的字符/字节
    • 读入列表
  3. 写入文件

    • 覆盖写入模式 ('w')
    • 追加写入模式 ('a')
    • 写入多行内容
  4. 处理不同类型的文件

    • 处理文本文件 (默认)
    • 处理二进制文件 (如图片、视频)
    • 处理 CSV 文件 (使用 csv 模块)
    • 处理 JSON 文件 (使用 json 模块)
  5. 高级主题与最佳实践

    Python读写文件代码示例-图2
    (图片来源网络,侵删)
    • 文件编码问题
    • 处理文件不存在的情况 (try...except)
    • 获取文件信息
    • 删除和重命名文件 (os 模块)

基础概念

文件路径

  • 相对路径: 相对于当前执行的 Python 脚本所在的目录。
    • data.txt (在当前目录下)
    • ../parent_folder/data.txt (在上一级目录的 parent_folder 文件夹下)
  • 绝对路径: 从文件系统的根目录开始的完整路径。
    • C:\Users\YourUser\Documents\data.txt (Windows)
    • /home/youruser/documents/data.txt (Linux / macOS)

建议:在代码中尽量使用绝对路径,因为它更可靠,不受脚本执行位置的影响,可以使用 os.path 模块来构建跨平台的路径。

核心函数:open()

所有文件操作都始于 open() 函数。

file_object = open(file_name, mode, encoding)
  • file_name: 字符串,要打开的文件路径。
  • mode: 打开文件的模式,决定了是读还是写,下面是常用的模式:
    • 'r': (Read) - 默认模式,文件必须存在,否则会报错。
    • 'w': (Write) - 如果文件存在,则清空内容;如果文件不存在,则创建新文件。
    • 'a': 追加 (Append) - 在文件末尾添加内容,如果文件不存在,则创建新文件。
    • 'b': 二进制 (Binary) - 必须与其它模式(如 'r', 'w')结合使用,用于处理非文本文件(如图片、视频)。
    • 读写 (Read and Write) - 必须与其它模式(如 'r', 'w')结合使用,'r+'
  • encoding: 指定文件的编码格式,对于处理中文等非 ASCII 字符,强烈推荐使用 'utf-8'

文件对象的方法

打开文件后,会返回一个文件对象,我们可以通过这个对象来操作文件。

  • read(): 读取文件内容。
  • readline(): 读取一行内容。
  • readlines(): 读取所有行,并返回一个列表。
  • write(): 写入内容。
  • writelines(): 写入一个字符串列表(列表中的每个字符串代表一行)。
  • close(): 关闭文件,释放资源。

最佳实践:使用 with 语句

使用 with 语句是 Python 中处理文件的标准方式,它会在代码块执行完毕后自动关闭文件,即使发生了错误,也能确保文件被正确关闭,避免了资源泄漏。

Python读写文件代码示例-图3
(图片来源网络,侵删)
# 推荐方式
with open('my_file.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    # 在这里操作文件...
# 代码块执行完毕后,f.close() 会被自动调用
# 不推荐的方式 (容易忘记关闭文件)
f = open('my_file.txt', 'r', encoding='utf-8')
content = f.read()
f.close() # 必须手动关闭

读取文件

假设我们有一个名为 greeting.txt 的文件,内容如下:

Hello, Python!
这是第二行。
这是第三行。

读取整个文件内容

使用 read() 方法。

with open('greeting.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)
    # 输出:
    # Hello, Python!
    # 这是第二行。
    # 这是第三行。

逐行读取

使用 readline() 方法,适合处理大文件,因为它不会一次性将所有内容加载到内存中。

with open('greeting.txt', 'r', encoding='utf-8') as f:
    while True:
        line = f.readline()
        if not line: # line 为空字符串,表示已到文件末尾
            break
        print(line.strip()) # 使用 strip() 去掉行尾的换行符 \n
    # 输出:
    # Hello, Python!
    # 这是第二行。
    # 这是第三行。

读入列表

使用 readlines() 方法,它会将每一行作为一个元素存入列表。

with open('greeting.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    print(lines)
    # 输出:
    # ['Hello, Python!\n', '这是第二行,\n', '这是第三行,\n']
# 可以方便地遍历
for line in lines:
    print(line.strip())

写入文件

覆盖写入模式 ('w')

如果文件 new_file.txt 已存在,它的内容将被清空并写入新内容。

with open('new_file.txt', 'w', encoding='utf-8') as f:
    f.write('这是第一行,\n')
    f.write('这是第二行。')

执行后,new_file.txt 的内容为:

这是第一行。
这是第二行。

追加写入模式 ('a')

在文件末尾添加新内容,不会影响原有内容。

# 假设 new_file.txt 内容如上
with open('new_file.txt', 'a', encoding='utf-8') as f:
    f.write('\n这是新追加的一行。')

执行后,new_file.txt 的内容为:

这是第一行。
这是第二行。
这是新追加的一行。

使用 writelines() 方法,它接受一个字符串列表。

lines_to_write = ['苹果\n', '香蕉\n', '橙子']
with open('fruits.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines_to_write)

执行后,fruits.txt 的内容为:

苹果
香蕉
橙子

处理不同类型的文件

处理二进制文件

读取图片、视频等文件时,必须使用二进制模式 ('rb' 读取, 'wb' 写入)。

示例:复制一张图片

# 读取源图片 (二进制模式)
with open('source_image.jpg', 'rb') as source_file:
    image_data = source_file.read()
# 写入目标图片 (二进制模式)
with open('destination_image.jpg', 'wb') as dest_file:
    dest_file.write(image_data)
print("图片复制成功!")

处理 CSV 文件

强烈建议使用 Python 内置的 csv 模块,它能正确处理逗号、引号等特殊情况。

写入 CSV 文件

import csv
data = [
    ['姓名', '年龄', '城市'],
    ['张三', 30, '北京'],
    ['李四', 25, '上海']
]
with open('students.csv', 'w', newline='', encoding='utf-8-sig') as f: # utf-8-sig 可以防止 Excel 乱码
    writer = csv.writer(f)
    writer.writerows(data)

读取 CSV 文件

import csv
with open('students.csv', 'r', encoding='utf-8-sig') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
    # 输出:
    # ['姓名', '年龄', '城市']
    # ['张三', '30', '北京']
    # ['李四', '25', '上海']

处理 JSON 文件

使用 json 模块,它可以将 Python 字典/列表与 JSON 字符串相互转换。

写入 JSON 文件

import json
data = {
    "name": "王五",
    "age": 40,
    "skills": ["Python", "Java"],
    "is_student": False
}
with open('data.json', 'w', encoding='utf-8') as f:
    # indent=4 使 JSON 文件格式化,更易读
    json.dump(data, f, indent=4, ensure_ascii=False) # ensure_ascii=False 保证中文正常显示

执行后,data.json 的内容为:

{
    "name": "王五",
    "age": 40,
    "skills": [
        "Python",
        "Java"
    ],
    "is_student": false
}

读取 JSON 文件

import json
with open('data.json', 'r', encoding='utf-8') as f:
    loaded_data = json.load(f)
print(loaded_data)
# 输出: {'name': '王五', 'age': 40, 'skills': ['Python', 'Java'], 'is_student': False}
print(loaded_data['name'])
# 输出: 王五

高级主题与最佳实践

文件编码问题

处理中文时,最常见的错误就是 UnicodeDecodeError,解决方法是在 open() 函数中明确指定 encoding='utf-8',如果文件不是 UTF-8 编码,你需要知道它实际的编码(如 gbk, gb2312 等)。

# 尝试用 utf-8 打开,如果失败则用 gbk
try:
    with open('gbk_file.txt', 'r', encoding='utf-8') as f:
        content = f.read()
except UnicodeDecodeError:
    with open('gbk_file.txt', 'r', encoding='gbk') as f:
        content = f.read()
print(content)

处理文件不存在的情况

使用 try...except FileNotFoundError 结构,可以让程序在文件不存在时优雅地处理,而不是直接崩溃。

file_path = 'non_existent_file.txt'
try:
    with open(file_path, 'r', encoding='utf-8') as f:
        content = f.read()
except FileNotFoundError:
    print(f"错误:文件 '{file_path}' 未找到!")
else:
    print("文件内容读取成功:")
    print(content)

获取文件信息

使用 osos.path 模块来获取文件的元数据。

import os
file_path = 'students.csv'
if os.path.exists(file_path):
    print(f"文件名: {os.path.basename(file_path)}")
    print(f"文件大小: {os.path.getsize(file_path)} 字节")
    print(f"文件路径: {os.path.abspath(file_path)}")
else:
    print("文件不存在")

删除和重命名文件

同样使用 os 模块。

import os
# 重命名文件
if os.path.exists('old_name.txt'):
    os.rename('old_name.txt', 'new_name.txt')
    print("文件重命名成功")
# 删除文件
if os.path.exists('to_delete.txt'):
    os.remove('to_delete.txt')
    print("文件删除成功")
操作 推荐方法 关键点
打开文件 with open(...) as f: 必须使用 with,指定模式 ('r', 'w', 'a') 和编码 ('utf-8')
读取文本 f.read(), f.readline(), f.readlines() readline() 适合大文件
写入文本 f.write(), f.writelines() 注意写入换行符 \n
读取二进制 with open(..., 'rb') as f: 模式加 'b'
写入二进制 with open(..., 'wb') as f: 模式加 'b'
处理 CSV import csv 使用 csv.readercsv.writer
处理 JSON import json 使用 json.load()json.dump()
错误处理 try...except FileNotFoundError 让程序更健壮

希望这份详细的指南能帮助你完全掌握 Python 的文件操作!

分享:
扫描分享到社交APP
上一篇
下一篇