1.1 文件系统概述
文件系统负责组织和管理数据在存储设备上的存储和检索方式。Python 提供了多个模块来与文件系统进行交互,例如 os
、os.path
和 pathlib
。理解文件系统的结构对于在 Python 中高效地执行文件操作至关重要。
常见文件系统类型:
- FAT (文件分配表): 用于较旧的系统和一些可移动存储设备。
- NTFS (新技术文件系统): 现代Windows系统使用的文件系统。
- ext (扩展文件系统): Linux 系统使用的文件系统家族。
Python 提供了丰富的功能来处理文本文件,这些功能可以用来读取文件中的内容、向文件中写入数据、追加数据等。掌握文本文件操作是进行文件处理的基础。
2.1 打开和关闭文件
在 Python 中,文件操作的第一步是打开文件。在 Python 中可以使用 open()
函数来打开一个文件,它会返回一个文件对象。文件对象表示一个打开的文件,并允许进行各种文件操作。
open()
函数的语法如下:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
其中:
file
:表示要打开的文件的路径。mode
:文件的操作模式,常见的有:'r'
:读取模式 (默认)。'w'
:写入模式,会覆盖文件。'a'
:追加模式,内容将被追加到文件末尾。'b'
:二进制模式,可与其他模式组合使用,如'rb'
表示二进制读取。'+'
:读写模式。
2.1.1 文件读取模式 (r
)
# 使用 'r' 模式打开文件进行读取
file = open('example.txt', 'r') # 打开文件进行读取
# 读取文件的内容
content = file.read()
print(content)
# 关闭文件
file.close()
在以上代码中,open()
函数以只读模式打开了一个名为 example.txt
的文件。如果文件存在,则读取其内容;如果文件不存在,则会引发 FileNotFoundError
异常。
注意: 在进行文件操作时,务必要在完成操作后关闭文件,这可以通过调用 file.close()
实现。未关闭文件可能会导致文件损坏或资源泄漏问题。
2.1.2 使用 with
语句自动管理文件
Python 提供了一种更好的方法来管理文件,即使用 with
语句。在使用 with
语句时,无需显式调用 close()
,文件会在代码块结束时自动关闭。这种方式不仅简洁,还能确保文件始终被正确关闭。
# 使用 with 语句自动管理文件
with open('example.txt', 'r') as file:
content = file.read()
print(content)
# 退出 with 语句后,文件自动关闭
优点:
- 避免忘记关闭文件。
- 简化代码,提高代码可读性。
2.2 读取文件内容
Python 提供了多种方法来从文件中读取内容,包括读取整个文件、逐行读取以及按指定大小读取。
2.2.1 read()
:读取整个文件
read()
方法可以一次性读取文件的所有内容。可以指定一个整数参数来限制读取的字节数,如果不指定参数则读取整个文件内容。
# 读取整个文件内容
with open('example.txt', 'r') as file:
content = file.read()
print(content)
说明:
read()
方法会读取整个文件并将其内容作为字符串返回。如果文件较大,建议不要使用这种方式,因为它会将所有内容加载到内存中,可能会导致内存不足。
2.2.2 readline()
:逐行读取
readline()
方法每次只读取文件中的一行,适用于需要逐行处理文件的场景。
# 使用 readline() 逐行读取文件
with open('example.txt', 'r') as file:
line = file.readline()
while line:
print(line, end='') # 打印每一行
line = file.readline() # 读取下一行
说明:
readline()
方法每次只读取一行,遇到换行符\n
时停止。- 使用
while
循环可以逐行读取文件直到读取完整个文件。
2.2.3 readlines()
:读取所有行
readlines()
方法会一次性读取文件的所有行,并将其作为一个包含每行内容的列表返回。
# 使用 readlines() 读取所有行
with open('example.txt', 'r') as file:
lines = file.readlines()
for line in lines:
print(line, end='')
说明:
readlines()
会将每一行作为列表中的一个元素。可以使用循环逐行处理文件内容。
2.3 文件写入操作
文件写入操作是将数据写入到文件中。Python 提供了简单的文件写入功能,可以将数据保存到文件中供以后使用。
2.3.1 写入文件的基本方法 (write()
)
要向文件中写入数据,可以使用 open()
函数并将文件模式设置为 'w'
。如果文件不存在,open()
会自动创建文件;如果文件已经存在,写入操作会覆盖文件中的所有内容。
# 使用 'w' 模式写入文件
with open('output.txt', 'w') as file:
file.write("这是写入文件的第一行。\n")
file.write("这是写入文件的第二行。")
说明:
write()
方法将字符串写入文件。如果要写入多行文本,可以多次调用write()
,或将数据拼接成一个字符串。- 使用
'w'
模式会覆盖文件中的现有内容,因此要小心避免意外覆盖重要数据。
2.3.2 追加文件 (a
模式)
使用 'a'
模式打开文件时,新的内容将被追加到文件的末尾,而不会覆盖现有内容。
# 使用 'a' 模式追加写入文件
with open('output.txt', 'a') as file:
file.write("\n这是追加到文件末尾的内容。")
说明:
'a'
模式会在文件末尾添加新内容,而不会影响文件中已存在的数据。
2.4 文件模式总结
常见的文件操作模式总结如下:
模式 | 作用 |
---|---|
'r' |
以只读模式打开文件,文件必须存在。 |
'w' |
以写入模式打开文件,文件不存在时会创建新文件,存在时会覆盖文件内容。 |
'a' |
以追加模式打开文件,文件不存在时会创建新文件,存在时会在末尾追加内容。 |
'b' |
以二进制模式打开文件,常与其他模式组合使用,如 'rb' 表示以二进制方式读取文件。 |
'+' |
以读写模式打开文件,允许同时进行读写操作。 |
2.5 文件的缓冲与编码
2.5.1 文件缓冲
open()
函数的 buffering
参数控制文件的缓冲行为。默认情况下,文本文件使用行缓冲,二进制文件使用块缓冲。
# 设置不使用缓冲区(0 表示禁用缓冲)
with open('example.txt', 'w', buffering=0) as file:
file.write("无缓冲的写入操作。")
2.5.2 文件编码
处理非ASCII字符时,通常需要指定文件的编码格式。Python 使用 encoding
参数来指定文件的编码,如 UTF-8。
# 指定文件编码为 UTF-8
with open('utf8_file.txt', 'w', encoding='utf-8') as file:
file.write("这是使用UTF-8编码写入的内容。")