Python文件操作详细介绍(打开、读取、写入、上下文管理器、关闭、异常处理;文件模式、编码、路径、读写位置、复制、移动、删除)

2024-07-30 08:31:52 浏览数 (2)

一、基础操作

1. 打开文件

使用内置函数open()可以打开一个文件,并返回一个文件对象。你需要提供文件的路径以及打开模式(读取、写入、追加等)。

代码语言:javascript复制
file = open('file.txt', 'r')  # 以只读模式打开名为file.txt的文件

2. 读取文件

文件对象提供了多个用于读取文件内容的方法,常用的有:

代码语言:javascript复制
content = file.read()  # 读取整个文件内容
line = file.readline()  # 读取文件的一行内容
lines = file.readlines()  # 读取文件的所有行内容并返回列表
  • read(): 读取整个文件的内容为一个字符串。
  • readline(): 逐行读取文件内容,每次读取一行。
  • readlines(): 将文件内容按行读取,并返回一个包含每行内容的列表。

3. 写入文件

使用文件对象的write()方法可以将数据写入文件。你可以将字符串或者字节流作为参数传递给write()方法。

代码语言:javascript复制
file = open('file.txt', 'w')  # 以写入模式打开文件
file.write('Hello, World!')  # 写入字符串到文件

4. 上下文管理器

在处理文件操作时,为了确保文件在使用后被正确关闭,你可以使用上下文管理器来自动管理文件的打开和关闭。使用with语句可以创建一个上下文管理器,并在代码块执行完毕后自动关闭文件,无需手动调用close()方法。

代码语言:javascript复制
with open('file.txt', 'r') as file:
    # 执行文件操作,文件会在代码块执行完毕后自动关闭

5. 关闭文件

完成对文件的操作后,应该关闭文件以释放系统资源。使用文件对象的close()方法可以关闭文件。

代码语言:javascript复制
file.close()  # 关闭文件

6. 异常处理

在文件操作过程中,可能会出现一些异常情况,比如文件不存在、权限错误等。你可以使用异常处理语句来捕获并处理这些异常情况。

代码语言:javascript复制
try:
    file = open('file.txt', 'r')
    # 执行文件操作
except FileNotFoundError:
    print("文件不存在")
except PermissionError:
    print("没有文件访问权限")
finally:
    file.close()  # 确保文件被关闭

二、进阶操作

6. 文件模式

在打开文件时,你需要指定文件的模式,可以将模式与打开的文件路径一起传递给open()函数,如open('file.txt', 'r')。常见的文件模式包括:

  • 'r':只读模式(默认)。打开文件后,只能读取文件内容,不能进行写入操作。
  • 'w':写入模式。如果文件存在,会先清空文件内容,然后写入新的内容;如果文件不存在,会创建一个新的文件。
  • 'a':追加模式。在文件末尾追加新的内容,不会清空原有内容;如果文件不存在,会创建一个新的文件。
  • 'x':独占创建模式。创建新文件,如果文件已存在,则打开失败。
  • 'b':二进制模式。以二进制格式读取或写入文件,如读取图片或视频文件。
  • 't':文本模式(默认)。以文本格式读取或写入文件,如读取或写入字符串。

7. 文件的编码处理

在处理文本文件时,需要考虑文件的编码格式。Python提供了多种编码处理方式,常见的有:

  • ascii:ASCII编码,适用于英文文本。
  • utf-8:UTF-8编码,适用于多种语言的文本。
  • latin-1:Latin-1编码,适用于西欧语言的文本。

在打开文件时,你可以指定文件的编码格式。

代码语言:javascript复制
with open('file.txt', 'r', encoding='utf-8') as file:
    # 处理文件内容

8. 文件路径操作

在文件操作中,你经常需要处理文件路径和文件名。Python提供了os模块和os.path模块来进行文件路径操作。你可以使用这些模块来获取文件的绝对路径、检查文件是否存在、创建目录等。

代码语言:javascript复制
import os

file_path = 'path/to/file.txt'
abs_path = os.path.abspath(file_path)  # 获取文件的绝对路径
file_exists = os.path.exists(file_path)  # 检查文件是否存在
dir_name = os.path.dirname(file_path)  # 获取文件所在目录的路径
os.makedirs('path/to/new_dir')  # 创建目录

9. 文件的读写位置

文件对象维护了一个读写位置指针,指示下一次读取或写入操作的位置。在读取文件内容时,指针会随着读取的字节数向后移动;在写入文件内容时,指针会在写入后移动到新的位置。你可以使用文件对象的seek()方法来改变指针的位置,以便读取或写入特定位置的数据。例如:

代码语言:javascript复制
with open('file.txt', 'r') as file:
    file.seek(10)  # 将指针移动到文件的第10个字节处
    data = file.read()  # 从第10个字节开始读取文件内容

10. 迭代文件内容

文件对象可以像迭代器一样被迭代,逐行读取文件内容。这在处理大型文件时非常有用,因为不需要一次性将整个文件读入内存。

代码语言:javascript复制
with open('file.txt', 'r') as file:
    for line in file:
        # 处理每一行内容

11. 文件的复制、移动、删除

在文件操作中,你可能需要将文件复制到另一个位置或移动文件到不同的目录。Python提供了shutil模块来处理文件的复制、移动和删除等操作。

代码语言:javascript复制
import shutil

# 复制文件
shutil.copy('source.txt', 'destination.txt')

# 移动文件
shutil.move('file.txt', 'new_dir/file.txt')

# 删除文件
os.remove('file.txt')

0 人点赞