python 临时文件的使用-文件流或字符串(字节串)直接转为文件对象

Python的强大永远会带给我们意外的惊喜。最近在使用websocket时遇到了文件对象的传输问题:对于前端页面传来的文件流、字符串需要转为文件对象再传输给api接口。那么首先想到的是将文件流或字符串存入文件再从直接读取以获取文件文件对象,这种方式固然可行,但是弊端是需要额外占用空间来存储文件,当然我们也可以每次调用结束后清理文件,如果没有临时文件模块这也是一种可行的方式。

强大如python,拥有临时文件模块-tempfile,这个模块可以产生临时文件或文件夹,并且支持所有的平台。

这个模块我们常用的方法如下:

tempfile.TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]])

这个方法会返回一个临时存储的文件对象, 这个文件对象将在使用close方法或垃圾回收后被销毁。在使用过程中不应该依赖于使用此函数创建的临时文件,该文件在文件系统中具有或不具有可见名称。这个方法创建的文件对象默认模式是“w+b”,bufsize默认为-1,表示使用操作系统默认值。

返回的对象在POSIX平台上的真实文件对象,在其他平台上,它是一个类文件对象,其file属性是底层的真实文件对象。这个类文件对象可以在with语句中使用,就像普通文件一样。

tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])

这个方法与TemporaryFile()基本相同,区别是它可以保证文件在文件系统中具有可见名称。可以从返回的类文件对象的name属性中检索该名称。名称可以用于第二次打开文件, 如果delete为true(默认值),则文件一关闭就会被删除。

>>> f = NamedTemporaryFile(delete=False) 
>>> f <open file '<fdopen>', mode 'w+b' at 0x384698> 
>>> f.name '/var/folders/5q/5qTPn6xq2RaWqk+1Ytw3-U+++TI/-Tmp-/tmpG7V1Y0' 
>>> f.write("Hello World!\n") 
>>> f.close() # 关闭即删除文件 
>>> os.unlink(f.name) 
>>> os.path.exists(f.name) 
False

完整的文件流或字符串、字节串转文件对象的方法:

import tempfile

def string_to_file(string):
    file_like_obj = tempfile.NamedTemporaryFile()
    file_like_obj.write(string)
    # 确保string立即写入文件
    file_like_obj.flush()
    # 将文件读取指针返回到文件开头位置
    file_like_obj.seek(0)
    return file_like_object

对于临时文件夹的创建使用的是:tempfile.tempdir

>>> import tempfile
>>> tempfile.tempdir
# 返回临时文件夹路径
>>> tempfile.gettempdir()   # 对于不同平台临时文件夹创建的路径也不一样
'c:\\users\\hlshang\\appdata\\local\\temp'

对于更多方法及使用可以参考官方文档。


有趣有料有温度,和我一起学技术!

欢迎关注公众号 来思Go,收看更多赖克与甜甜的技术学习日常。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值