Python 提供了丰富的文件读写操作,可以轻松处理文本文件和二进制文件。以下是关于 Python 文件读写操作的详细讲解,包括打开文件、读取文件、写入文件、文件指针操作、文件关闭和异常处理等方面。
一、文件的打开和关闭
在对文件进行读写操作之前,首先需要打开文件。Python 使用 open()
函数来打开文件,并返回一个文件对象。文件对象提供了多种方法,用于文件的读写操作。
1.1 open()
函数
open()
函数的基本语法如下:
open(filename, mode='r', encoding=None)
- filename:要打开的文件名,可以包含路径。
- mode:文件打开模式,默认为 'r'(只读模式)。常见模式如下:
'r'
:只读模式。如果文件不存在,会抛出 FileNotFoundError 异常。'w'
:写入模式。如果文件不存在,会创建新文件;如果文件存在,会覆盖文件内容。'a'
:追加模式。如果文件不存在,会创建新文件;如果文件存在,新的内容会追加到文件末尾。'b'
:二进制模式,可与其他模式结合使用,如'rb'
(二进制读)、'wb'
(二进制写)。'+'
:更新模式,可与其他模式结合使用,如'r+'
(读写模式)、'w+'
(覆盖写读模式)、'a+'
(追加读写模式)。
- encoding:文件编码方式,读取或写入文本文件时使用,如
'utf-8'
。
1.2 文件关闭
使用完文件后,需要调用文件对象的 close()
方法关闭文件,以释放系统资源。可以使用 with
语句上下文管理器自动管理文件的打开和关闭:
with open('example.txt', 'r') as file:
content = file.read()
# 文件会在 with 语句块结束时自动关闭
二、文件的读取操作
2.1 read()
方法
read()
方法用于读取整个文件内容,并将其作为字符串返回。可以指定读取的字节数:
with open('example.txt', 'r', encoding='utf-8') as file:
content = file.read() # 读取整个文件内容
print(content)
如果文件较大,可以指定读取的字节数:
with open('example.txt', 'r', encoding='utf-8') as file:
partial_content = file.read(100) # 读取前 100 个字符
print(partial_content)
2.2 readline()
方法
readline()
方法用于逐行读取文件,每次调用读取一行:
with open('example.txt', 'r', encoding='utf-8') as file:
line = file.readline()
while line:
print(line, end='')
line = file.readline()
2.3 readlines()
方法
readlines()
方法读取文件的所有行,并返回一个包含各行内容的列表:
with open('example.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
for line in lines:
print(line, end='')
2.4 文件对象的迭代
文件对象本身是可迭代的,可以直接用于 for
循环逐行读取文件:
with open('example.txt', 'r', encoding='utf-8') as file:
for line in file:
print(line, end='')
三、文件的写入操作
3.1 write()
方法
write()
方法用于将字符串写入文件:
with open('example.txt', 'w', encoding='utf-8') as file:
file.write("Hello, world!\n")
file.write("Python file handling.\n")
3.2 writelines()
方法
writelines()
方法用于将一个字符串列表写入文件:
lines = ["Hello, world!\n", "Python file handling.\n"]
with open('example.txt', 'w', encoding='utf-8') as file:
file.writelines(lines)
四、文件指针操作
文件指针(file pointer)用于指示文件读取或写入的位置。可以使用文件对象的方法进行文件指针的移动和查询。
4.1 tell()
方法
tell()
方法返回文件指针的当前位置:
with open('example.txt', 'r', encoding='utf-8') as file:
print(file.read(5)) # 读取前 5 个字符
print(file.tell()) # 返回当前文件指针位置(应为 5)
4.2 seek()
方法
seek()
方法用于移动文件指针到指定位置:
with open('example.txt', 'r', encoding='utf-8') as file:
file.seek(10) # 移动文件指针到第 10 个字符
print(file.read()) # 从第 10 个字符开始读取
五、异常处理
文件操作过程中可能会发生各种异常,如文件不存在、权限不足等。可以使用 try...except
语句进行异常处理:
try:
with open('example.txt', 'r', encoding='utf-8') as file:
content = file.read()
except FileNotFoundError:
print("文件不存在")
except PermissionError:
print("权限不足")
except Exception as e:
print(f"其他错误: {e}")
六、二进制文件操作
除了文本文件,Python 也可以处理二进制文件。二进制文件操作与文本文件类似,只是需要以二进制模式打开文件,并使用二进制读写方法。
6.1 二进制读写
打开文件时需要使用 'b'
模式,如 'rb'
、'wb'
、'ab'
等:
# 写入二进制文件
with open('example.bin', 'wb') as file:
file.write(b'\x01\x02\x03\x04')
# 读取二进制文件
with open('example.bin', 'rb') as file:
data = file.read()
print(data) # 输出: b'\x01\x02\x03\x04'
Python 提供了丰富的文件读写操作,通过 open()
函数打开文件,使用不同模式(如读、写、追加、二进制等)进行操作,并提供了多种方法(如 read()
、write()
、readlines()
等)处理文件内容。文件操作完成后需要关闭文件,可以使用 with
语句上下文管理器自动管理文件的打开和关闭。文件操作过程中需要注意异常处理,以确保程序的稳定性。