目录
在Python中,IO(输入输出)操作以及文件处理是非常常见的任务,通常涉及读取和写入数据。Python提供了丰富的标准库来处理文件和执行IO操作,如
open()
函数、with
语句、os
和
shutil
模块等。
下面我将介绍Python中的文件处理与IO操作,涵盖常用的文件操作、文件打开模式、读取与写入文件的方式以及如何处理文件相关的异常等内容。
1. 打开和关闭文件
打开文件:在Python中,处理文件的最基本方式是使用
open()
函数来打开文件。open()
返回一个文件对象,这个对象可以用来进行文件的读取和写入操作。
# 打开文件
file = open('example.txt', 'r') # 以只读模式打开文件
在这里,'r'
是打开文件的模式,后面会详细介绍不同的模式。
关闭文件:当文件操作完成后,最好使用
close()
方法来关闭文件,以释放系统资源。
file.close() # 关闭文件
2. 打开文件的模式
在打开文件时,open()
函数接受第二个参数,表示打开文件的模式。常见的模式有:
'r'
:只读模式,文件必须存在。'w'
:写入模式,文件不存在时会创建,存在时会覆盖原有内容。'a'
:追加模式,文件不存在时会创建,存在时会在文件末尾追加内容。'b'
:二进制模式,用于处理非文本文件(如图片、音频文件等)。可以与其他模式结合使用(如'rb'
,表示以二进制只读模式打开文件)。'x'
:创建模式,如果文件已存在则抛出异常。't'
:文本模式,默认值。用于读取文本文件。
示例:
file = open('example.txt', 'w') # 创建并写入文件
3. 使用 with
语句打开文件
with
语句用于打开文件时,它会在文件操作完成后自动关闭文件,避免忘记关闭文件的情况。推荐使用
with
语句来处理文件,以确保文件能及时关闭。
with open('example.txt', 'r') as file:
content = file.read()
print(content)
在使用 with
语句时,不需要显式调用
close()
,Python会自动处理。
4. 读取文件内容
读取整个文件:
with open('example.txt', 'r') as file:
content = file.read() # 读取整个文件内容
print(content)
按行读取文件:
with open('example.txt', 'r') as file:
lines = file.readlines() # 返回文件内容的列表,每一项是文件的一行
for line in lines:
print(line.strip()) # 使用 strip() 去掉行末的换行符
逐行读取文件:
with open('example.txt', 'r') as file:
for line in file: # 逐行读取
print(line.strip()) # 输出每行内容
5. 写入文件
写入文本到文件:
如果文件不存在,会创建文件;如果文件已存在,会覆盖原有内容。
with open('example.txt', 'w') as file:
file.write("Hello, Python!\n") # 写入单行
file.write("Welcome to file handling.\n")
追加到文件:
如果希望在文件末尾追加内容,而不是覆盖原有内容,可以使用 'a'
模式。
with open('example.txt', 'a') as file:
file.write("Appending new content.\n")
写入多行:
with open('example.txt', 'w') as file:
lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
file.writelines(lines) # 写入多行
6. 文件指针与偏移
文件对象有一个内部指针,表示当前读取的位置。你可以使用以下方法来控制文件指针的位置。
tell()
:返回当前文件指针的位置。
with open('example.txt', 'r') as file:
print(file.tell()) # 返回文件指针当前位置
file.read(5) # 读取5个字符
print(file.tell()) # 再次查看文件指针位置
seek(offset, whence)
:将文件指针移动到指定位置。offset
:偏移量(字节数)。whence
:参考点,默认是os.SEEK_SET
,表示从文件开头开始计算。还可以是os.SEEK_CUR
(当前位置)或os.SEEK_END
(文件末尾)。
with open('example.txt', 'r') as file:
file.seek(5) # 将文件指针移到文件的第6个字符位置
content = file.read() # 从第6个字符开始读取
print(content)
7. 文件操作异常处理
在进行文件操作时,可能会遇到各种异常,比如文件不存在、权限问题等。我们可以使用
try-except
语句来捕获并处理这些异常。
try:
with open('example.txt', 'r') as file:
content = file.read()
except FileNotFoundError:
print("文件不存在")
except PermissionError:
print("没有权限访问文件")
except Exception as e:
print(f"发生错误: {e}")
8. 文件操作模块
Python标准库提供了一些模块来辅助文件操作,常见的有:
os
模块:用于处理文件和目录,提供文件路径操作、权限修改等功能。shutil
模块:用于高阶文件操作,如文件复制、删除、移动等。
示例:使用 os
和 shutil
import os
import shutil
# 检查文件是否存在
if os.path.exists('example.txt'):
print("文件存在")
# 获取文件的大小
file_size = os.path.getsize('example.txt')
print(f"文件大小: {file_size} 字节")
# 复制文件
shutil.copy('example.txt', 'copy_example.txt') # 复制文件到新位置
# 删除文件
os.remove('copy_example.txt') # 删除文件
总结
Python的文件操作非常强大且灵活,通过简单的API,你可以轻松地实现文件的读写、路径操作、异常处理等功能。记住,最好使用
with
语句来打开文件,以确保文件能够被正确关闭,避免资源泄漏。同时,可以利用
os
和 shutil
等标准库进行更复杂的文件操作。