在Python中,文件操作和I/O(输入/输出)处理是编程中非常重要的部分,广泛应用于数据读取、写入、处理等场景。以下是对Python文件操作与I/O处理的详细介绍:
一、文件操作基础
(一)打开文件
-
使用
open()
函数- 语法:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file
:文件路径,可以是相对路径或绝对路径。mode
:指定文件的打开模式,常见的模式有:'r'
:只读模式(默认模式),文件必须存在,否则会报错。'w'
:写入模式,如果文件存在则覆盖,不存在则创建。'x'
:独占创建模式,如果文件存在则会报错。'a'
:追加模式,如果文件存在则在文件末尾追加内容,不存在则创建。't'
:文本模式(默认模式),以文本形式处理文件。'b'
:二进制模式,以二进制形式处理文件。'+'
:更新模式,可以同时进行读写操作。
- 示例:
f = open('example.txt', 'r') # 打开文件用于只读
- 语法:
-
上下文管理器
with
- 使用
with
语句可以自动管理文件的打开和关闭,避免忘记关闭文件导致的资源泄漏。 - 示例:
with open('example.txt', 'r') as f:content = f.read() # 文件在离开with块后自动关闭
- 使用
(二)读取文件
read()
方法- 读取整个文件内容为一个字符串。
- 示例:
with open('example.txt', 'r') as f:content = f.read() print(content)
readline()
方法- 逐行读取文件,每次读取一行,返回一个字符串。
- 示例:
with open('example.txt', 'r') as f:while True:line = f.readline()if not line:breakprint(line, end='') # 打印时去掉额外的换行符
readlines()
方法- 读取整个文件内容为一个列表,每一行是一个列表元素。
- 示例:
with open('example.txt', 'r') as f:lines = f.readlines() for line in lines:print(line, end='')
(三)写入文件
write()
方法- 写入字符串内容到文件。
- 示例:
with open('output.txt', 'w') as f:f.write('Hello, ')f.write('World!')
writelines()
方法- 写入一个字符串列表到文件,不会自动添加换行符。
- 示例:
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n'] with open('output.txt', 'w') as f:f.writelines(lines)
二、文件位置与文件对象属性
- 文件指针位置
- 使用
tell()
方法获取当前文件指针的位置。 - 使用
seek(offset, whence)
方法移动文件指针。offset
:偏移量。whence
:可选值为0
(文件开头,默认值)、1
(当前位置)、2
(文件末尾)。
- 示例:
with open('example.txt', 'r') as f:print(f.tell()) # 输出0f.seek(5) # 移动到第6个字符位置print(f.read(1)) # 读取一个字符print(f.tell()) # 输出当前指针位置
- 使用
- 文件对象属性
name
:文件名。mode
:文件打开模式。closed
:文件是否关闭。- 示例:
f = open('example.txt', 'r') print(f.name) # 输出文件名 print(f.mode) # 输出文件模式 print(f.closed) # 输出False f.close() print(f.closed) # 输出True
三、文件和目录操作
- 文件操作
- 使用
os
模块进行文件操作。 - 示例:
import os os.remove('example.txt') # 删除文件 os.rename('old_name.txt', 'new_name.txt') # 重命名文件
- 使用
- 目录操作
- 创建目录:
os.mkdir('new_folder')
- 删除目录:
os.rmdir('new_folder')
- 列出目录内容:
os.listdir('.')
- 获取当前工作目录:
os.getcwd()
- 改变工作目录:
os.chdir('new_folder')
- 示例:
import os os.mkdir('test_folder') # 创建一个新目录 os.chdir('test_folder') # 切换到新目录 print(os.getcwd()) # 输出当前工作目录 os.listdir('.') # 列出当前目录内容 os.rmdir('test_folder') # 删除目录
- 创建目录:
四、二进制文件操作
- 读取二进制文件
- 使用
'rb'
模式打开文件。 - 示例:
with open('image.png', 'rb') as f:binary_data = f.read()
- 使用
- 写入二进制文件
- 使用
'wb'
模式打开文件。 - 示例:
with open('output.png', 'wb') as f:f.write(binary_data)
- 使用
五、文件I/O的高级用法
- 缓冲区控制
- 在
open()
函数中可以通过buffering
参数控制缓冲区大小。 - 示例:
with open('example.txt', 'r', buffering=1024) as f: # 设置缓冲区大小为1024字节content = f.read()
- 在
- 文件对象的迭代
- 文件对象本身是一个可迭代对象,可以直接在
for
循环中使用。 - 示例:
with open('example.txt', 'r') as f:for line in f:print(line, end='')
- 文件对象本身是一个可迭代对象,可以直接在
六、文件操作的注意事项
- 文件编码
- 在读写文本文件时,需要指定正确的编码格式,否则可能会出现乱码。
- 常用的编码格式有
utf-8
、gbk
等。 - 示例:
with open('example.txt', 'r', encoding='utf-8') as f:content = f.read()
- 文件权限
- 如果文件权限不足,可能会导致文件无法打开或写入。
- 可以通过
os.chmod()
方法修改文件权限。 - 示例:
import os os.chmod('example.txt', 0o777) # 修改文件权限为可读写执行
- 文件不存在或已损坏
- 在打开文件时,如果文件不存在或已损坏,可能会抛出异常。
- 可以通过
try-except
语句捕获异常并处理。 - 示例:
try:with open('nonexistent.txt', 'r') as f:content = f.read() except FileNotFoundError:print('文件不存在') except Exception as e:print(f'发生错误:{e}')
通过以上内容,你可以掌握Python文件操作与I/O处理的基本方法和高级技巧,从而更好地在实际开发中处理文件相关的任务。
文章来源于zlibrary图书馆中《Python编程从入门到实践》书的Python文件操作与I/O处理章节内容