python读 写临时文件
看到网上一篇文章提到面试的时候,面试官提到以下要求:
假设你正在编写的方法,需要每次执行时,在服务器上创建一个临时文件同时支持书写部分内容,而后将该文件的位置传输给第三方的类。待第三方类获取到你文本内的数据时,最后执行对该临时文件的删除操作,同时需要支持高可用,也就是写入,再读取一次便销毁。
挺有意思的一个题,本来想手写实现,搜了搜原来python已经有了相关的轮子,那干嘛还造轮子,下面是代码。
import tempfile
def read_temp_file(file_object=None):
"""
读取临时文件信息
:param file_object:
:return:
"""
data = file_object.read() # read方法会读取临时文件中的内容,并随之销毁临时文件
final_data = data.decode() if isinstance(data, bytes) else data
print(f'read file info:{final_data}')
def make_write_temp_file(content:str):
"""
写入临时文件内容
:return:
"""
_tmp_file = tempfile.TemporaryFile() # 查看该类发现是以:w+b方式写入文件的,该模式支持热读写,并且要求写入格式是二进制
try:
print(_tmp_file.name)
# _tmp_file.write(b"something\n")
_tmp_file.write(content.encode("utf-8")) # 需要写入二进制
_tmp_file.seek(0)
# 读取并销毁临时文件
read_temp_file(_tmp_file)
finally:
_tmp_file.close() # 关闭文件资源
if __name__ == '__main__':
make_write_temp_file("我是临时文件")
# 结果
# C:\Users\ADMINI~1\AppData\Local\Temp\tmpgc9jb6nq
# read file info:我是临时文件
win临时文件路径:C:\Users\ADMINI~1\AppData\Local\Temp\tmpkllcmso7;其中Temp后面的文件名每次创建写入文件的时候都是随机的,确保了高可用,不会让其他第三方打开读取临时文件;LINUX临时文件路径:/tmp路径;