• 售前

  • 售后

热门帖子
入门百科

准确的使用Python暂时文件

[复制链接]
爱之关怀阿飞米 显示全部楼层 发表于 2021-10-26 13:32:00 |阅读模式 打印 上一主题 下一主题
目录


  • 1、前言
  • 2. tempfile模块介绍
  • 3. 示例介绍

    • 3.1 不正确示例:
    • 3.2 正确示例


1、前言


临时文件通常用来保存无法保存在内存中的数据,大概通报给必须从文件读取的外部程序。一般我们会在/tmp目录下生成唯一的文件名,但是安全的创建临时文件并不是那么简朴,需要遵守许多规则。永远不要本身去实行做这件事,而是要借助库函数实现。而且也要警惕清理临时文件。
临时文件引起的最大标题就是,可以猜测文件名,导致恶意用户可以猜测临时文件名,从而创建软链接挟制临时文件。

2. tempfile模块介绍


创建临时文件一般利用的模块就是tempfile,此模块库函数常用的有以下几个:
tempfile.mktemp # 不安全,禁止利用
tempfile.mkstemp # 随机创建tmp文件,默认创建的文件在/tmp目录,固然也可以指定(可以利用)
tempfile.TemporaryFile # 内存中创建文件,文件不会存储在磁盘,关闭后即删除(可以利用)
tempfile.NamedTemporaryFile(delete=True) 当delete=True时,作用跟上面一样,当是False时,会存储在磁盘(可以利用)

3. 示例介绍


以下几种方式分别介绍了安全的创建临时文件及不安全的方式。

3.1 不正确示例:


不正确1:
  1. import os
  2. import tempfile
  3. # This will most certainly put you at risk
  4. tmp = os.path.join(tempfile.gettempdir(), filename)
  5. if not os.path.exists(tmp):
  6. with open(tmp, "w") file:
  7.   file.write("defaults")
复制代码
不正确2:
  1. import os
  2. import tempfile
  3. open(tempfile.mktemp(), "w")
复制代码
不正确3:
  1. filename = "{}/{}.tmp".format(tempfile.gettempdir(), os.getpid())
  2. open(filename, "w")
复制代码
3.2 正确示例


正确1:
  1. fd, path = tempfile.mkstemp()
  2. try:
  3. with os.fdopen(fd, 'w') as tmp:
  4.   # do stuff with temp file
  5.   tmp.write('stuff')
  6. finally:
  7. os.remove(path)
复制代码
正确2:
  1. # 句柄关闭,文件即删除
  2. with tempfile.TemporaryFile() as tmp:
  3. # Do stuff with tmp
  4. tmp.write('stuff')
复制代码
正确3:
  1. tmp = tempfile.NamedTemporaryFile(delete=True)
  2. try:
  3. # do stuff with temp
  4. tmp.write('stuff')
  5. finally:
  6. tmp.close() # 文件关闭即删除
复制代码
以上就是正确的利用Python临时文件的具体内容,更多关于利用Python临时文件的资料请关注脚本之家别的相关文章!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作