根据您的目录,我将为每个小节补充代码示例和运行演示输出过程。请注意,由于这里是一个文本环境,我将提供代码和预期的输出,但实际的运行结果需要在您的本地环境中执行代码来验证。
2.11.1 文件的打开和关闭
2.11.1.1 使用 open() 函数打开文件
# 打开文件
f = open("example.txt", "w")
f.write("批量小王子")
f.close()
输出: 无(文件被创建并写入内容)
2.11.1.2 文件模式:读取、写入、追加等
# 以读取模式打开文件
with open("example.txt", "r") as f:
print(f.read())
# 以追加模式打开文件
with open("example.txt", "a") as f:
f.write("\n追加内容")
输出:
批量小王子
追加内容
2.11.1.3 使用 close() 方法关闭文件
f = open("example.txt", "r")
print(f.read())
f.close()
输出:
批量小王子
2.11.1.4 使用上下文管理器 with 语句自动管理文件
with open("example.txt", "r") as f:
print(f.read())
输出:
批量小王子
2.11.2 文件的读取和写入
2.11.2.1 读取整个文件内容:read() 方法
with open("example.txt", "r") as f:
print(f.read())
输出:
批量小王子
2.11.2.2 逐行读取文件:readline() 和 readlines() 方法
with open("example.txt", "r") as f:
print(f.readline())
print(f.readlines())
输出:
批量小王子
['批量小王子']
2.11.2.3 写入文件:write() 和 writelines() 方法
with open("example.txt", "w") as f:
f.write("批量小王子\n")
f.writelines(["第二行\n", "第三行\n"])
输出: 无(文件被覆盖并写入新内容)
2.11.2.4 文件的缓冲区刷新:flush() 方法
with open("example.txt", "w") as f:
f.write("批量小王子")
f.flush() # 强制将缓冲区内容写入文件
输出: 无(缓冲区被刷新)
2.11.3 文件指针操作
2.11.3.1 获取文件指针当前位置:tell() 方法
with open("example.txt", "r") as f:
print(f.tell()) # 文件指针在文件开头
f.read(1)
print(f.tell()) # 文件指针移动了1个字符
输出:
0
1
2.11.3.2 移动文件指针位置:seek() 方法
with open("example.txt", "r") as f:
f.seek(0) # 移动文件指针到文件开头
print(f.read(1)) # 读取1个字符
输出:
批量小王子
2.11.3.3 文件指针的相对和绝对定位
with open("example.txt", "r") as f:
f.seek(-3, 2) # 从文件末尾向前移动3个字符
print(f.read()) # 读取剩余内容
输出:
小王子
2.11.4 文件和目录的操作
2.11.4.1 检查文件或目录是否存在:os.path.exists() 方法
import os
print(os.path.exists("example.txt")) # 检查文件是否存在
输出:
True
2.11.4.2 创建和删除文件:os 和 pathlib 模块
import os
os.remove("example.txt") # 删除文件
输出: 无(文件被删除)
2.11.4.3 创建和删除目录:os.mkdir() 和 os.rmdir() 方法
import os
os.mkdir("new_dir") # 创建目录
os.rmdir("new_dir") # 删除目录
输出: 无(目录被创建和删除)
2.11.4.4 递归创建和删除目录:os.makedirs() 和 os.removedirs() 方法
import os
os.makedirs("dir1/dir2/dir3") # 递归创建目录
os.removedirs("dir1/dir2/dir3") # 递归删除目录
输出: 无(目录被递归创建和删除)
2.11.4.5 列出目录内容:os.listdir() 方法
import os
print(os.listdir(".")) # 列出当前目录内容
输出: 取决于当前目录内容
2.11.4.6 复制、移动和重命名文件或目录:shutil 模块
import shutil
shutil.copy("example.txt", "example_copy.txt") # 复制文件
shutil.move("example_copy.txt", "new_name.txt") # 移动文件
输出: 无(文件被复制和移动)
2.11.4.7 获取文件和目录的属性:os.stat() 方法
import os
print(os.stat("example.txt")) # 获取文件属性
输出: 取决于文件属性
2.11.4.8 修改文件权限和所有者:os.chmod() 和 os.chown() 方法
import os
os.chmod("example.txt", 0o644) # 修改文件权限
输出: 无(文件权限被修改)
2.11.4.9 处理文件路径:os.path 和 pathlib 模块
from pathlib import Path
p = Path("example.txt")
print(p.resolve()) # 解析文件的绝对路径
输出: 文件的绝对路径
2.11.5 文件异常处理
2.11.5.1 捕获文件操作中的异常:try-except 结构
try:
with open("non_existent_file.txt", "r") as f:
pass
except FileNotFoundError:
print("文件不存在")
输出:
文件不存在
2.11.5.2 常见文件操作异常及其处理
try:
with open("example.txt", "r") as f:
print(f.read(100)) # 读取超出文件长度的内容
except ValueError:
print("读取超出文件长度")
输出:
读取超出文件长度
2.11.6 文件编码
2.11.6.1 指定文件编码:encoding 参数
with open("example.txt", "w", encoding="utf-8") as f:
f.write("批量小王子")
输出: 无(文件被写入内容,编码为utf-8)
2.11.6.2 处理不同编码的文件
with open("example.txt", "r", encoding="utf-8") as f:
print(f.read())
输出:
批量小王子
2.11.7 临时文件和目录
2.11.7.1 使用 tempfile 模块创建临时文件和目录
import tempfile
temp_file = tempfile.NamedTemporaryFile()
print(temp_file.name) # 临时文件路径
temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name) # 临时目录路径
输出: 临时文件和目录的路径
2.11.7.2 管理临时文件的生命周期
import tempfile
with tempfile.NamedTemporaryFile() as tmp:
print(tmp.name) # 临时文件路径
# 文件
在with块结束时自动删除
输出: 临时文件路径
2.11.8 高级文件操作
2.11.8.1 内存映射文件:mmap 模块
import mmap
with open("example.txt", "r+b") as f:
mm = mmap.mmap(f.fileno(), 0)
print(mm.readline()) # 读取文件内容
mm.close()
输出:
批量小王子
2.11.8.2 文件锁定机制
import fcntl
with open("example.txt", "w") as f:
fcntl.flock(f, fcntl.LOCK_EX) # 锁定文件
# 文件操作
fcntl.flock(f, fcntl.LOCK_UN) # 解锁文件
输出: 无(文件被锁定和解锁)
2.11.8.3 文件的随机访问
with open("example.txt", "r+") as f:
f.seek(0, 2) # 移动到文件末尾
f.write("\n新内容")
print(f.tell()) # 获取当前文件指针位置