Python文件访问
在 Python 中,文件访问是常见的操作,主要通过内置的 open()
函数实现,配合不同的模式和方法可以完成读取、写入、追加等操作。以下是关于 Python 文件访问的详细说明:
一、基本语法:open()
函数
open()
函数用于打开文件并返回文件对象,基本语法:
file_object = open(file_path, mode, encoding)
file_path
:文件路径(绝对路径或相对路径)mode
:打开模式(决定文件操作类型)encoding
:编码格式(如utf-8
,文本模式下使用)
二、常用文件打开模式
模式 | 含义 | 特点 |
---|---|---|
r | 只读模式(默认) | 文件必须存在,否则报错 |
w | 写入模式 | 若文件存在则清空内容,不存在则创建 |
a | 追加模式 | 在文件末尾添加内容,不存在则创建 |
r+ | 读写模式 | 可读写,文件必须存在 |
w+ | 读写模式 | 先清空再读写,不存在则创建 |
a+ | 读写模式 | 可读写,新内容追加在末尾 |
b | 二进制模式 | 用于非文本文件(如图片、音频),需与上述模式组合(如 rb 、wb ) |
三、文件操作的两种方式
1. 手动管理(需手动关闭文件)
# 打开文件
file = open("test.txt", "r", encoding="utf-8")# 操作文件
content = file.read()
print(content)# 关闭文件(必须执行,否则可能导致资源泄露)
file.close()
2. 上下文管理器(推荐,自动关闭文件)
使用 with
语句,无需手动调用 close()
,代码块执行完毕后自动关闭文件:
with open("test.txt", "r", encoding="utf-8") as file:content = file.read() # 读取内容print(content)
四、常用文件操作方法
1. 读取文件
read(size)
:读取指定字节数的内容,默认读取全部with open("test.txt", "r") as f:print(f.read(10)) # 读取前10个字符
readline()
:读取一行内容with open("test.txt", "r") as f:print(f.readline()) # 读取第一行
readlines()
:读取所有行,返回列表(每行作为元素)with open("test.txt", "r") as f:lines = f.readlines()for line in lines:print(line)
直接迭代文件对象(高效读取大文件)
with open("test.txt", "r") as f:for line in f: # 逐行迭代,内存友好print(line)
2. 写入文件
write(content)
:写入字符串with open("test.txt", "w") as f:f.write("Hello, Python!\n") # 写入内容,\n 表示换行
writelines(iterable)
:写入可迭代对象(如列表)lines = ["第一行\n", "第二行\n", "第三行\n"] with open("test.txt", "w") as f:f.writelines(lines) # 批量写入
3. 其他常用方法
seek(offset)
:移动文件指针到指定位置(用于随机访问)tell()
:返回当前文件指针位置flush()
:刷新缓冲区,将内容立即写入文件
五、处理二进制文件
对于图片、音频等二进制文件,需使用 b
模式:
# 读取图片
with open("image.jpg", "rb") as f:data = f.read() # 读取二进制数据# 写入图片
with open("copy_image.jpg", "wb") as f:f.write(data) # 写入二进制数据
六、注意事项
- 编码问题:文本文件需指定正确编码(如
encoding="utf-8"
),否则可能出现乱码 - 路径问题:Windows 使用
\
(需转义为\\
或用原始字符串r""
),macOS/Linux 使用/
- 大文件处理:优先使用逐行迭代(
for line in file
),避免一次性加载全部内容导致内存占用过高 - 异常处理:可结合
try-except
捕获文件操作中的错误(如文件不存在、权限问题)
try:with open("test.txt", "r") as f:print(f.read())
except FileNotFoundError:print("文件不存在")
except Exception as e:print(f"发生错误:{e}")
通过以上方法,可以灵活地在 Python 中进行文件的读取、写入、修改等操作,根据实际需求选择合适的模式和方法即可。