Python shutil 与 tempfile
Python shutil 与 tempfile 的完整教学讲解。
shutil 文件操作
基本写法:复制文件
shutil.copy(<源>, <目标>)
# 复制文件(保留权限)
import shutil
shutil.copy("src.txt", "dst.txt")
shutil.copy2("src.txt", "dst.txt") # 保留元数据
基本写法:复制文件内容
shutil.copyfile(<源>, <目标>)
# 仅复制内容,不保留权限
shutil.copyfile("src.txt", "dst.txt")
基本写法:复制目录树
shutil.copytree(<源目录>, <目标目录>)
# 递归复制目录
shutil.copytree("src_dir", "dst_dir")
基本写法:复制目录(忽略)
shutil.copytree(<源>, <目标>, ignore=shutil.ignore_patterns(*<模式>))
# 复制时忽略指定模式
shutil.copytree("src", "dst", ignore=shutil.ignore_patterns("*.tmp", "*.log"))
基本写法:删除目录树
shutil.rmtree(<目录>)
# 递归删除目录
shutil.rmtree("dst_dir")
基本写法:移动文件
shutil.move(<源>, <目标>)
# 移动文件或目录
shutil.move("src.txt", "subdir/dst.txt")
shutil 元数据与权限
基本写法:复制模式
shutil.copymode(<源>, <目标>)
# 仅复制权限位
shutil.copymode("src.txt", "dst.txt")
基本写法:复制元数据
shutil.copystat(<源>, <目标>)
# 复制权限、时间、扩展属性
shutil.copystat("src.txt", "dst.txt")
基本写法:chown 改属主
shutil.chown(<路径>, user=<用户>, group=<组>)
# 修改所有者(Unix)
shutil.chown("file", user="alice", group="staff")
shutil 压缩归档
基本写法:创建归档
shutil.make_archive(<基础名>, <格式>, <根目录>)
# 创建 zip/tar 归档
shutil.make_archive("backup", "zip", "src_dir")
shutil.make_archive("backup", "gztar", "src_dir")
基本写法:解包归档
shutil.unpack_archive(<文件>, <目录>)
# 解压归档
shutil.unpack_archive("backup.zip", "output")
基本写法:查看支持的格式
shutil.get_archive_formats()
# 列出支持的归档格式
print(shutil.get_archive_formats())
shutil 磁盘信息
基本写法:磁盘使用情况
shutil.disk_usage(<路径>)
# 获取磁盘使用情况
usage = shutil.disk_usage("/")
print(usage.total, usage.used, usage.free)
基本写法:获取终端大小
shutil.get_terminal_size()
# 获取终端列数行数
size = shutil.get_terminal_size()
print(size.columns, size.lines)
基本写法:which 查找可执行文件
shutil.which(<命令>)
# 查找命令路径
print(shutil.which("python"))
tempfile 临时文件
基本写法:临时文件
tempfile.TemporaryFile()
# 创建临时文件,关闭自动删除
import tempfile
with tempfile.TemporaryFile() as f:
f.write(b"hello")
f.seek(0)
print(f.read())
基本写法:命名临时文件
tempfile.NamedTemporaryFile()
# 可访问文件名的临时文件
with tempfile.NamedTemporaryFile(suffix=".txt", delete=False) as f:
f.write(b"hello")
print(f.name)
基本写法:临时目录
tempfile.TemporaryDirectory()
# 临时目录,退出自动删除
with tempfile.TemporaryDirectory() as d:
print(d)
# 在 d 下创建文件
基本写法:mkstemp 创建临时文件
tempfile.mkstemp(suffix=<后缀>, prefix=<前缀>, dir=<目录>)
# 低层创建,返回 fd 与路径
fd, path = tempfile.mkstemp(suffix=".log")
os.close(fd)
基本写法:mkdtemp 创建临时目录
tempfile.mkdtemp(prefix=<前缀>)
# 创建临时目录(需手动删除)
d = tempfile.mkdtemp(prefix="myapp_")
基本写法:gettempdir 临时目录
tempfile.gettempdir()
# 获取系统临时目录
print(tempfile.gettempdir())
基本写法:gettempdirb 字节路径
tempfile.gettempdirb()
# 字节形式临时目录
print(tempfile.gettempdirb())
fileinput 文件输入
基本写法:迭代多文件
fileinput.input(<文件列表>)
# 串联读取多个文件
import fileinput
for line in fileinput.input(["a.txt", "b.txt"]):
print(fileinput.filename(), fileinput.lineno(), line.rstrip())
基本写法:原地编辑
fileinput.input(<文件>, inplace=True)
# 原地修改文件(stdout 重定向到文件)
for line in fileinput.input("data.txt", inplace=True):
print(line.rstrip().upper())
基本写法:备份数据
fileinput.input(<文件>, backup=".bak")
# 编辑前创建备份
for line in fileinput.input("data.txt", backup=".bak", inplace=True):
print(line.rstrip())
基本写法:files 与 filelineno
fileinput.filename() | fileinput.filelineno()
# 当前文件名与文件内行号
for line in fileinput.input(["a.txt", "b.txt"]):
print(fileinput.filename(), fileinput.filelineno())
基本写法:isfirstline 判断首行
fileinput.isfirstline()
# 判断是否为当前文件首行
for line in fileinput.input(files):
if fileinput.isfirstline():
print("新文件:", fileinput.filename())
fnmatch 文件名匹配
基本写法:匹配文件名
fnmatch.fnmatch(<文件名>, <模式>)
# shell 风格通配符匹配
import fnmatch
print(fnmatch.fnmatch("data.txt", "*.txt"))
print(fnmatch.fnmatch("file.PY", "*.py")) # 大小写不敏感(Windows)
基本写法:大小写敏感
fnmatch.fnmatchcase(<文件名>, <模式>)
# 严格大小写匹配
print(fnmatch.fnmatchcase("file.PY", "*.py")) # False
基本写法:filter 过滤
fnmatch.filter(<名称列表>, <模式>)
# 过滤匹配的名称
files = ["a.txt", "b.py", "c.txt"]
print(fnmatch.filter(files, "*.txt"))
基本写法:translate 转正则
fnmatch.translate(<模式>)
# 通配符转正则表达式
print(fnmatch.translate("*.txt"))