Python利用临时文件实现数据的保存

假设有一个 WebSocket 接口,会源源不断地产生数据,我们需要将其保存下来,然后进行处理。但由于数据量比较大,无法一次性加载到内存,最好的办法就是保存到文件里。

如果数据处理完毕,不再需要相关文件的话,那么我们可以使用临时文件。临时文件的最大好处就是,不用命名、并且关闭时会自动删除,而无需我们手动删。

下面我们来看看如何使用临时文件。

import tempfile

# 第一个参数是 mode,表示打开模式
# 默认是 "wb+",二进制可读可写
f = tempfile.TemporaryFile()
# 假设我们写 1G 的数据
f.write(b"+" * 1024 * 1024 * 1024)
# 此时文件指针会移动到末尾
# 想要读取的话,需要移动到开头
f.seek(0, 0)
print(len(f.read()))
"""
1073741824
"""
print(1073741824 == 1024 * 1024 * 1024)
"""
True
"""

临时文件和真实文件的操作方法是一样的,因为临时文件本质上也属于文件,它的数据也存储在系统上,只不过我们不知道罢了。当调用 f.close(),临时文件就会被自动删除,占用的磁盘空间也会被释放。我们来验证一下:

import psutil
import tempfile

GB_UNIT = 1024 * 1024 * 1024

# 临时文件默认存储在 C 盘
# 我们查看已经使用的空间
print(
    psutil.disk_usage("C:\\").used / GB_UNIT
)  # 89.93075561523438

f = tempfile.TemporaryFile()
# 写 1G 的数据
f.write(b"+" * 1024 * 1024 * 1024)

# 不出意外的话,应该增加 1G
print(
    psutil.disk_usage("C:\\").used / GB_UNIT
)  # 90.93075561523438

# 关闭临时文件,然后释放磁盘空间
f.close()
# 所以又会减少 1G
print(
    psutil.disk_usage("C:\\").used / GB_UNIT
)  # 89.93075561523438

输出一切正常,所以结论如下:

  • 临时文件本质上也是文件,它在存储数据的时候,也是存储在磁盘上,和真实文件并无二致;
  • 临时文件的调用属于操作系统级别的,所以它的创建、读写数据,最终都会走操作系统提供的系统调用;
  • 临时文件在被关闭时,操作系统会自动删除;

然后我们还可以指定临时文件的存储位置,虽然临时文件关闭时会自动删除,但我们还是希望它能存储在指定的位置上。

import tempfile
import time

f = tempfile.TemporaryFile(dir=r"E:\data")
time.sleep(30)

为了观察到现象,这里 sleep 了 30 秒。执行时,打开目录,会发现文件创建了,并且操作系统帮我们起了个名字。

等 30 秒过后,文件又被自动删除了。

然后 TemporaryFile 里面还接收其它参数,我们来看一下:

大部分参数和内置函数 open 类似,但里面有一个 prefix 和 suffix 参数。因为临时文件也是文件,也要存储在磁盘上,只不过关闭之后会自动删除。所以它也要有一个名字,默认名字的前缀是 "tmp",没有后缀,而我们可以指定前缀和后缀,举个例子:

import tempfile
import time

f = tempfile.TemporaryFile(dir=r"E:\data",
                           prefix="你好呀",
                           suffix="我不好")
time.sleep(30)

执行一下看看:

此时文件的前缀和后缀就被我们改掉了,不过说实话这个前缀和后缀没太大卵用,既然是临时文件,用完就删除了,名字没太大关注的必要。

那么问题来了,如果不指定 dir 参数,我们就不知道文件存在哪了吗?显然不是的,默认存在什么地方,tempfile 已经提前告诉我们了。

import tempfile

# Linux 系统是 /tmp
print(
    tempfile.gettempdir()
)  # C:\Users\satori\AppData\Local\Temp
# 返回二进制结果
print(
    tempfile.gettempdirb()
)  # b'C:\\Users\\satori\\AppData\\Local\\Temp'

# 获取前缀
print(
    tempfile.gettempprefix()
)  # tmp
# 返回二进制结果
print(
    tempfile.gettempprefixb()
)  # b'tmp'

最后想说的是,临时文件也可以使用 mmap 进行映射。

import tempfile
import mmap

f = tempfile.TemporaryFile()
f.write(b"hello, world")
# 映射之前需要移动一下光标
f.seek(0, 0)
# mmap 映射,这里就映射 5 字节
m = mmap.mmap(f.fileno(), 5)
m[:] = b"HELLO"

# 再次打印
print(f.read())
"""
b'HELLO, world'
"""

以上就是临时文件的用法,当然 tempfile 还提供了其它的操作,有兴趣可以了解一下,但使用最普遍的还是 TemporaryFile。

到此这篇关于Python利用临时文件实现数据的保存的文章就介绍到这了,更多相关Python临时文件保存数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何用tempfile库创建python进程中的临时文件

    技术背景 临时文件在python项目中时常会被使用到,其作用在于随机化的创建不重名的文件,路径一般都是放在Linux系统下的/tmp目录.如果项目中并不需要持久化的存储一个文件,就可以采用临时文件的形式进行存储和读取,在使用之后可以自行决定是删除还是保留. tempfile库的使用 tempfile一般是python内置的一个函数库,不需要单独安装,这里我们直接介绍一下其常规使用方法: # tempfile_test.py import tempfile file = tempfile.Name

  • Python临时文件创建之tempfile模块介绍

    目录 一.tempfile模块简介 1.tempfile模块应用场景 2.tempfile模块的方法 二.tempfile模块主要函数介绍 1.Temporaryfile函数 2.NamedTemporaryfile函数 3.假脱机模式高级临时文件对象创建函数:SpooledTemporaryfile 4.高级临时目录创建函数:TemporaryDirectory 5.底层临时文件/目录创建函数:mkstemp和mkdtemp 三.tempfile模块的文件/文件夹属性操作函数 1.返回临时文件

  • python创建临时文件夹的方法

    本文实例讲述了python创建临时文件夹的方法.分享给大家供大家参考.具体实现方法如下: import tempfile, os tempfd, tempname = tempfile.mkstemp('.suffix') os.write(tempfd, "aString") # or, if you want a file-object: os.fdopen(tempfd, 'w+') os.close(tempfd) os.unlink(tempname) 希望本文所述对大家的P

  • Python创建临时文件和文件夹

    问题 你需要在程序执行时创建一个临时文件或目录,并希望使用完之后可以自动销毁掉. 解决方案 tempfile 模块中有很多的函数可以完成这任务. 为了创建一个匿名的临时文件,可以使用 tempfile.TemporaryFile : from tempfile import TemporaryFile with TemporaryFile('w+t') as f: # Read/write to the file f.write('Hello World\n') f.write('Testing

  • 利用python清除移动硬盘中的临时文件

    1.目标场景 用过Mac OS的朋友应该都遇到过,日常的文件操作会在同级目录下产生一些特定的临时文件. 平常将文件夹打包成压缩包或拷贝文件夹到移动硬盘内,临时文件会包含在里面,如果是程序源代码,在Windows系统下编译有时候还会受到影响. 本篇文章的目的是在移动硬盘插入到电脑的同时,利用Python自动化和Windows服务删除掉这些临时文件. 2.编写代码 首先,我们需要循环检测PC的驱动器,判断是否存在可移动的磁盘. # 循环遍历,对每一个驱动器进行判断 while True:      

  • Python tempfile模块学习笔记(临时文件)

    tempfile.TemporaryFile 如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFile函数创建临时文件是最好的选择.其他的应用程序是无法找到或打开这个文件的,因为它并没有引用文件系统表.用这个函数创建的临时文件,关闭后会自动删除. 实例一: 复制代码 代码如下: import osimport tempfile print 'Building a file name yourself:'filename = '/tmp/guess_my

  • 正确的使用Python临时文件

    1.前言 临时文件通常用来保存无法保存在内存中的数据,或者传递给必须从文件读取的外部程序.一般我们会在/tmp目录下生成唯一的文件名,但是安全的创建临时文件并不是那么简单,需要遵守许多规则.永远不要自己去尝试做这件事,而是要借助库函数实现.而且也要小心清理临时文件. 临时文件引起的最大问题就是,可以预测文件名,导致恶意用户可以预测临时文件名,从而创建软链接劫持临时文件. 2. tempfile模块介绍 创建临时文件一般使用的模块就是tempfile,此模块库函数常用的有以下几个: tempfil

  • Python利用临时文件实现数据的保存

    假设有一个 WebSocket 接口,会源源不断地产生数据,我们需要将其保存下来,然后进行处理.但由于数据量比较大,无法一次性加载到内存,最好的办法就是保存到文件里. 如果数据处理完毕,不再需要相关文件的话,那么我们可以使用临时文件.临时文件的最大好处就是,不用命名.并且关闭时会自动删除,而无需我们手动删. 下面我们来看看如何使用临时文件. import tempfile # 第一个参数是 mode,表示打开模式 # 默认是 "wb+",二进制可读可写 f = tempfile.Tem

  • Python利用matplotlib模块数据可视化绘制3D图

    目录 前言 1 matplotlib绘制3D图形 2 绘制3D画面图 2.1 源码 2.2 效果图 3 绘制散点图 3.1 源码 3.2 效果图 4 绘制多边形 4.1 源码 4.2 效果图 5 三个方向有等高线的3D图 5.1 源码 5.2 效果图 6 三维柱状图 6.1 源码 6.2 效果图 7 补充图 7.1 源码 7.2 效果图 总结 前言 matplotlib实际上是一套面向对象的绘图库,它所绘制的图表中的每个绘图元素,例如线条Line2D.文字Text.刻度等在内存中都有一个对象与之

  • Python利用Bokeh进行数据可视化的教程分享

    目录 介绍 代码1.散点标记 代码2.单行 代码3.条形图 代码4.箱线图 代码5.直方图 代码6.散点图 介绍 Bokeh是 Python 中的数据可视化库,提供高性能的交互式图表和绘图.Bokeh 输出可以在笔记本.html 和服务器等各种媒体中获得.可以在 Django 和烧瓶应用程序中嵌入散景图. Bokeh 为用户提供了两个可视化界面: bokeh.models:为应用程序开发人员提供高度灵活性的低级接口. bokeh.plotting:用于创建视觉字形的高级界面. 要安装 bokeh

  • Python全面解析json数据并保存为csv文件

    目录 解析json数据并保存为csv文件 完整代码 将json任意行文件转为csv文件并保存 将json格式的前3000条数据存入csv 解析json数据并保存为csv文件 首先导入两个包: import json import pandas as pd 打开json 文件并读取: with open('2.json', encoding='utf-8') as f:     line = f.readline()     d = json.loads(line)     f.close() 读

  • Python数据分析之如何利用pandas查询数据示例代码

    前言 在数据分析领域,最热门的莫过于Python和R语言,本文将详细给大家介绍关于Python利用pandas查询数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 示例代码 这里的查询数据相当于R语言里的subset功能,可以通过布尔索引有针对的选取原数据的子集.指定行.指定列等.我们先导入一个student数据集: student = pd.io.parsers.read_csv('C:\\Users\\admin\\Desktop\\student.csv')

  • 如何用python爬取微博热搜数据并保存

    主要用到requests和bf4两个库 将获得的信息保存在d://hotsearch.txt下 import requests; import bs4 mylist=[] r = requests.get(url='https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6',timeout=10) print(r.status_code) # 获取返回状态 r.encoding=r.apparent_encoding demo

  • python利用xpath爬取网上数据并存储到django模型中

    帮朋友制作一个网站,需要一些产品数据信息,因为是代理其他公司产品,直接爬取代理公司产品数据 1.设计数据库 from django.db import models from uuslug import slugify import uuid import os def products_directory_path(instance, filename): ext = filename.split('.')[-1] filename = '{}.{}'.format(uuid.uuid4().

  • 利用Python改正excel表格数据

    目录 一.前言 二.代码实现及讲解 1.模块的导入 2.获取“数据原表”中数据 3.获取生产记录更新表中的日期和材料 4.对生产数据更新表中数据的修改 5.最后,调用函数并保存数据 三.效果展示 四.结尾 一.前言 大家好,今天我来介绍我接一个Python单子.我完成这个单子前后不到2小时.首先我接到这个单子的想法是处理Excel表,在两个表之间建立联系,并通过项目需求,修改excel表中的数据.我是运用面向过程写的,将每一步都放在了不同的函数中,下面让我来介绍一下我是怎么通过自己的思路一步一步

  • Python利用pandas计算多个CSV文件数据值的实例

    功能:扫描当前目录下所有CSV文件并对其中文件进行统计,输出统计值到CSV文件 pip install pandas import pandas as pd import glob,os,sys input_path='./' output_fiel='pandas_union_concat.csv' all_files=glob.glob(os.path.join(input_path,'sales_*')) all_data_frames=[] for file in all_files:

  • python 利用for循环 保存多个图像或者文件的实例

    在实际应用中,会遇到保存多个文件或者图像的操作,利用for循环可以实现基本要求: for i in range(50): plt.savefig("%d.jpg"%(i+1)) 就解决了,出去50组图片. 和print格式化输出有异曲同工之妙: print ("she is %d years old"%(18)) 以上这篇python 利用for循环 保存多个图像或者文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐