Python 文件 I/O 入门指南
在 Python 编程中,文件输入输出(I/O)是一项非常重要的技能。无论是读取配置文件、处理数据文件,还是将结果写入文件,都需要用到文件 I/O 操作。本文将为你提供一份详细的 Python 文件 I/O 入门指南,帮助你轻松掌握这一关键技能。
一、文件的打开与关闭
- 打开文件
- 使用
open()
函数可以打开一个文件。该函数接受两个参数:文件名和模式。文件名是要打开的文件的名称,可以是相对路径或绝对路径。模式指定了打开文件的方式,例如读取、写入或追加。 - 以下是一些常见的文件打开模式:
'r'
:以只读模式打开文件。如果文件不存在,会抛出FileNotFoundError
异常。'w'
:以写入模式打开文件。如果文件不存在,会创建一个新文件。如果文件已存在,会清空文件内容。'a'
:以追加模式打开文件。如果文件不存在,会创建一个新文件。如果文件已存在,会在文件末尾追加内容。'b'
:以二进制模式打开文件。可以与其他模式结合使用,例如'rb'
表示以二进制只读模式打开文件。
- 例如,以下代码以只读模式打开一个名为
example.txt
的文件:
- 使用
file = open('example.txt', 'r')
- 关闭文件
- 打开文件后,一定要记得关闭文件,以释放资源。可以使用
close()
方法来关闭文件。 - 例如:
- 打开文件后,一定要记得关闭文件,以释放资源。可以使用
file = open('example.txt', 'r')
# 对文件进行操作
file.close()
- 为了确保文件在使用后被正确关闭,也可以使用
with
语句。with
语句会在代码块执行完毕后自动关闭文件,即使在代码块中发生了异常。 - 例如:
with open('example.txt', 'r') as file:
# 对文件进行操作
二、文件的读取
- 读取整个文件
- 可以使用
read()
方法读取整个文件的内容。该方法返回一个字符串,包含文件中的所有内容。 - 例如:
- 可以使用
with open('example.txt', 'r') as file:
content = file.read()
print(content)
- 逐行读取文件
- 可以使用
readline()
方法逐行读取文件的内容。该方法每次返回一行内容,包括换行符。 - 例如:
- 可以使用
with open('example.txt', 'r') as file:
line = file.readline()
while line:
print(line)
line = file.readline()
- 也可以使用
readlines()
方法一次性读取文件的所有行,并将它们存储在一个列表中。 - 例如:
with open('example.txt', 'r') as file:
lines = file.readlines()
for line in lines:
print(line)
三、文件的写入
- 写入字符串
- 可以使用
write()
方法将字符串写入文件。如果文件以写入模式或追加模式打开,新的内容将被添加到文件中。 - 例如:
- 可以使用
with open('example.txt', 'w') as file:
file.write('Hello, world!')
- 写入多行内容
- 可以使用
writelines()
方法将一个字符串列表写入文件。每个字符串代表一行内容,不会自动添加换行符。 - 例如:
- 可以使用
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
with open('example.txt', 'w') as file:
file.writelines(lines)
四、文件的定位
- 获取当前位置
- 可以使用
tell()
方法获取文件指针的当前位置。文件指针指示了下一次读取或写入操作将发生的位置。 - 例如:
- 可以使用
with open('example.txt', 'r') as file:
position = file.tell()
print(position)
- 移动文件指针
- 可以使用
seek()
方法移动文件指针到指定的位置。该方法接受两个参数:偏移量和起始位置。起始位置可以是0
(文件开头)、1
(当前位置)或2
(文件末尾)。 - 例如:
- 可以使用
with open('example.txt', 'r') as file:
file.seek(10, 0) # 移动到文件开头后 10 个字节的位置
content = file.read()
print(content)
五、文件的属性
- 文件名
- 可以使用
name
属性获取文件的名称。 - 例如:
- 可以使用
with open('example.txt', 'r') as file:
print(file.name)
- 文件模式
- 可以使用
mode
属性获取文件的打开模式。 - 例如:
- 可以使用
with open('example.txt', 'r') as file:
print(file.mode)
- 文件是否已关闭
- 可以使用
closed
属性判断文件是否已关闭。如果文件已关闭,该属性返回True
;否则,返回False
。 - 例如:
- 可以使用
with open('example.txt', 'r') as file:
print(file.closed)
file.close()
print(file.closed)
六、处理不同类型的文件
- 文本文件
- 文本文件是最常见的文件类型,通常包含人类可读的文本内容。在 Python 中,可以使用默认的文本模式(
'r'
、'w'
、'a'
)来处理文本文件。 - 例如,读取一个文本文件并打印其中的内容:
- 文本文件是最常见的文件类型,通常包含人类可读的文本内容。在 Python 中,可以使用默认的文本模式(
with open('example.txt', 'r') as file:
content = file.read()
print(content)
- 写入一个文本文件:
with open('example.txt', 'w') as file:
file.write('Hello, world!')
- 二进制文件
- 二进制文件包含二进制数据,如图像、音频、视频文件等。在 Python 中,可以使用二进制模式(
'rb'
、'wb'
、'ab'
)来处理二进制文件。 - 例如,读取一个二进制文件并打印其中的内容:
- 二进制文件包含二进制数据,如图像、音频、视频文件等。在 Python 中,可以使用二进制模式(
with open('example.jpg', 'rb') as file:
content = file.read()
print(content)
- 写入一个二进制文件:
with open('example.jpg', 'wb') as file:
file.write(binary_data)
七、错误处理
- 文件不存在
- 如果尝试打开一个不存在的文件,会抛出
FileNotFoundError
异常。可以使用try-except
语句来捕获这个异常并进行相应的处理。 - 例如:
- 如果尝试打开一个不存在的文件,会抛出
try:
with open('nonexistent.txt', 'r') as file:
content = file.read()
print(content)
except FileNotFoundError:
print('File not found.')
- 权限错误
- 如果尝试以不适当的权限打开文件,会抛出
PermissionError
异常。同样,可以使用try-except
语句来捕获这个异常并进行相应的处理。 - 例如:
- 如果尝试以不适当的权限打开文件,会抛出
try:
with open('protected.txt', 'r') as file:
content = file.read()
print(content)
except PermissionError:
print('Permission denied.')
八、总结
Python 的文件 I/O 操作提供了丰富的功能,可以方便地处理各种类型的文件。在使用文件 I/O 时,要注意正确地打开和关闭文件,选择合适的文件模式,以及处理可能出现的错误。通过掌握这些基本技能,你可以在 Python 编程中更加高效地处理文件数据。