os 模块是 Python 中用于与操作系统交互的标准库模块,提供了丰富的文件/目录操作方法。
目录
1. 文件操作
Python 提供了多种方式进行文件操作,主要包括内置的 open()
函数和 os
模块中的相关方法。
1. 基本文件操作
1.1 打开和关闭文件
# 使用 open() 函数打开文件(推荐使用 with 语句自动关闭文件)
with open('example.txt', 'r', encoding='utf-8') as file:
content = file.read()
print(content)
print("-----------------------")
# 传统方式(需要手动关闭)
file = open('example.txt', 'r', encoding='utf-8')
try:
content = file.read()
print(content)
finally:
file.close()
1.2 文件打开模式
模式 | 描述 |
---|---|
'r' | 只读(默认) |
'w' | 写入,会覆盖已有文件 |
'x' | 独占创建,文件已存在则失败 |
'a' | 追加,写入到文件末尾 |
'b' | 二进制模式 |
't' | 文本模式(默认) |
'+' | 更新(可读可写) |
2. 读写文件内容
2.1 读取文件
print("-----------------------")
# 读取整个文件
with open('example.txt', 'r', encoding='utf-8') as file:
content = file.read()
print(content)
print("-----------------------")
# 逐行读取
with open('example.txt', 'r', encoding='utf-8') as file:
for line in file:
print(line, end='')
print("-----------------------")
# 读取所有行到列表
with open('example.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
print(lines)
print("-----------------------")
2.2 写入文件
print("-----------------------")
# 写入字符串
with open('output1.txt', 'w', encoding='utf-8') as file:
file.write("Hello, World!\n")
file.write("This is a new line.")
print("-----------------------")
# 写入多行
lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
with open('output2.txt', 'w', encoding='utf-8') as file:
file.writelines(lines)
print("-----------------------")
3. 文件定位
with open('example.txt', 'r+', encoding='utf-8') as file:
# 获取当前位置
position = file.tell()
print(f"Current position: {position}")
# 读取前5个字符
print(file.read(5))
# 移动到文件开头
file.seek(0)
# 读取第一行
print(file.readline())
# 移动到文件末尾
file.seek(0, 2)
file.write("\nAppended text")
4. 文件信息与操作
使用 os 模块
import os
# 重命名文件
os.rename('old.txt', 'new.txt')
# 删除文件
os.remove('file_to_delete.txt')
# 获取文件大小(字节)
size = os.path.getsize('example.txt')
print(f"File size: {size} bytes")
# 获取文件修改时间(时间戳)
mtime = os.path.getmtime('example.txt')
from datetime import datetime
print(f"Last modified: {datetime.fromtimestamp(mtime)}")
# 检查文件是否存在
if os.path.exists('example.txt'):
print("File exists")
5. 高级文件操作
5.1 二进制文件操作
# 读取二进制文件
with open('image.jpg', 'rb') as file:
data = file.read()
# 写入二进制文件
with open('copy.jpg', 'wb') as file:
file.write(data)
5.2 临时文件
import tempfile
# 创建临时文件
with tempfile.NamedTemporaryFile(delete=False) as temp:
temp.write(b"Some temporary data")
temp_path = temp.name
# 使用后可以手动删除
os.unlink(temp_path)
6. 文件编码处理
# 指定编码读写文件(Python 3默认使用utf-8)
with open('example.txt', 'r', encoding='utf-8') as file:
content = file.read()
# 处理编码错误
try:
with open('example.txt', 'r', encoding='utf-8') as file:
content = file.read()
except UnicodeDecodeError:
with open('example.txt', 'r', encoding='gbk') as file:
content = file.read()
7. 文件锁(跨进程同步)
import fcntl # Unix系统
with open('lockfile', 'w') as f:
try:
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB) # 非阻塞排他锁
# 执行需要同步的操作
except IOError:
print("Could not acquire lock")
finally:
fcntl.flock(f, fcntl.LOCK_UN) # 释放锁
2. 目录操作
在 Python 中,可以使用 os
和 pathlib
模块进行目录操作。
1. 检查目录是否存在
import os
dir_path = "my_directory"
if os.path.exists(dir_path):
print(f"目录 '{dir_path}' 存在")
else:
print(f"目录 '{dir_path}' 不存在")
2. 创建目录
2.1 创建单个目录
import os
dir_path = "my_directory"
if not os.path.exists(dir_path):
os.mkdir(dir_path) # 创建单层目录
print(f"目录 '{dir_path}' 创建成功")
else:
print(f"目录 '{dir_path}' 已存在")
2.2 创建多级目录(递归创建)
import os
dir_path = "parent_dir/child_dir/grandchild_dir"
if not os.path.exists(dir_path):
os.makedirs(dir_path) # 递归创建多级目录
print(f"目录 '{dir_path}' 创建成功")
else:
print(f"目录 '{dir_path}' 已存在")
3. 删除目录
3.1 删除空目录
import os
dir_path = "empty_dir"
if os.path.exists(dir_path):
os.rmdir(dir_path) # 只能删除空目录
print(f"目录 '{dir_path}' 已删除")
else:
print(f"目录 '{dir_path}' 不存在")
3.2 删除非空目录(递归删除)
import shutil
dir_path = "non_empty_dir"
if os.path.exists(dir_path):
shutil.rmtree(dir_path) # 递归删除整个目录(包括子目录和文件)
print(f"目录 '{dir_path}' 已删除")
else:
print(f"目录 '{dir_path}' 不存在")
4. 遍历目录
4.1 列出目录下的所有文件和子目录
import os
dir_path = "my_directory"
if os.path.exists(dir_path):
entries = os.listdir(dir_path) # 返回文件和目录名列表
print(f"目录 '{dir_path}' 下的内容:")
for entry in entries:
print(entry)
else:
print(f"目录 '{dir_path}' 不存在")
4.2 递归遍历所有文件和子目录
import os
dir_path = "my_directory"
if os.path.exists(dir_path):
for root, dirs, files in os.walk(dir_path):
print(f"当前目录: {root}")
print(f"子目录: {dirs}")
print(f"文件: {files}")
else:
print(f"目录 '{dir_path}' 不存在")
5. 获取当前工作目录
import os
current_dir = os.getcwd() # 获取当前工作目录
print(f"当前工作目录: {current_dir}")
# 修改当前工作目录
os.chdir("new_directory")
print(f"新工作目录: {os.getcwd()}")
6. 使用 pathlib
(更现代的目录操作方式)
from pathlib import Path
# 创建目录
dir_path = Path("my_directory")
dir_path.mkdir(exist_ok=True) # exist_ok=True 防止目录已存在时报错
# 检查目录是否存在
if dir_path.exists():
print(f"目录 '{dir_path}' 存在")
# 遍历目录
for file in dir_path.glob("*"): # 匹配所有文件/目录
print(file)
# 删除目录(必须为空)
dir_path.rmdir()
3. 高级操作
-
权限管理
os.chmod('file.txt', 0o755) # 修改文件权限 os.chown('file.txt', uid, gid) # 修改文件所有者(Unix)
-
进程管理
os.system('ls -l') # 执行系统命令 os.environ # 获取环境变量 os.getpid() # 获取当前进程ID
-
特殊路径
os.path.expanduser('~/file.txt') # 扩展用户目录 os.path.expandvars('$PATH/file.txt') # 扩展环境变量