目录:
tempfile 用于安全创建临时文件和目录,能够确保在程序运行过程中生成的临时数据得到妥善管理,适合处理那些不需要长期保存但程序运行期间又必需的中间数据,比如缓存文件、日志文件或临时配置文件等。
在创建临时文件前,有时需要了解系统的默认临时目录位置和文件名前缀。
import tempfile
# 获取默认临时目录路径(字符串格式)
temp_dir = tempfile.gettempdir()
print(f"系统临时目录: {temp_dir}") # 例如: /tmp 或 C:\Users\...\AppData\Local\Temp[2](@ref)[5](@ref)
# 获取字节格式的临时目录路径
temp_dir_b = tempfile.gettempdirb()
print(f"临时目录(bytes): {temp_dir_b}")
# 获取临时文件默认前缀
prefix = tempfile.gettempprefix()
print(f"临时文件前缀: {prefix}") # 通常为 'tmp'
TemporaryFile 创建的临时文件在文件系统中可能没有可见名称(尤其在 Unix 系统),关闭后会自动删除,非常适合存储私有临时数据。
import tempfile
# 方法一:手动管理
fp = tempfile.TemporaryFile(mode='w+b') # 默认模式,可读写二进制数据
fp.write(b'Hello, temporary world!')
fp.seek(0) # 将文件指针移回开头
data = fp.read()
print(f"读取的数据: {data}")
fp.close() # 文件关闭,自动删除
# 方法二:使用上下文管理器(推荐)
with tempfile.TemporaryFile(mode='w+t') as fp: # 文本模式
fp.write('这是一段临时文本数据。')
fp.seek(0)
print(fp.read())
# 退出 with 块后,文件自动关闭并删除
与 TemporaryFile 不同,NamedTemporaryFile 确保文件在文件系统中有一个可见的名称(可通过 .name 属性获取),这在需要让其他进程或函数知道文件路径时非常有用。
import tempfile
import os
# 创建临时文件,默认 delete=True,关闭后删除
with tempfile.NamedTemporaryFile(mode='w+t', suffix='.log', prefix='myapp_') as ntf:
print(f"临时文件路径: {ntf.name}")
ntf.write('Application log entry...\n')
# 在文件仍打开时,某些平台(如 Unix)允许用此路径再次打开文件
ntf.flush()
# 可以在此将 ntf.name 传递给其他需要文件路径的函数
# 创建临时文件但不自动删除(delete=False)
ntf = tempfile.NamedTemporaryFile(mode='w+b', delete=False, suffix='.dat')
try:
ntf.write(b'\x00\x01\x02')
file_path = ntf.name
finally:
ntf.close()
# 此时文件仍存在,可后续操作
print(f"文件仍存在: {os.path.exists(file_path)}")
os.unlink(file_path) # 手动删除
临时目录适合需要创建多个临时文件或复杂目录结构的场景。
import tempfile
import os
with tempfile.TemporaryDirectory(suffix='_cache', prefix='download_') as tmpdir:
print(f"创建的临时目录: {tmpdir}")
# 在临时目录中创建文件
temp_file_path = os.path.join(tmpdir, 'part1.txt')
with open(temp_file_path, 'w') as f:
f.write('Partial download data.')
# 可以在此进行一系列文件操作...
print(f"目录内容示例: {os.listdir(tmpdir)}")
# 退出 with 块后,整个目录及其内容被自动递归删除
↶ 返回首页 ↶