脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python利用临时文件实现数据的保存

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

2022-07-20 13:36古明地觉 Python

tempfile模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好。本文将利用tempfile模块创建临时文件来保存数据,感兴趣的可以了解一下

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import tempfile
 
# 第一个参数是 mode,表示打开模式
# 默认是 "wb+",二进制可读可写
= tempfile.TemporaryFile()
# 假设我们写 1G 的数据
f.write(b"+" * 1024 * 1024 * 1024)
# 此时文件指针会移动到末尾
# 想要读取的话,需要移动到开头
f.seek(00)
print(len(f.read()))
"""
1073741824
"""
print(1073741824 == 1024 * 1024 * 1024)
"""
True
"""

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import psutil
import tempfile
 
GB_UNIT = 1024 * 1024 * 1024
 
# 临时文件默认存储在 C 盘
# 我们查看已经使用的空间
print(
    psutil.disk_usage("C:\\").used / GB_UNIT
)  # 89.93075561523438
 
= 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

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

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

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

?
1
2
3
4
5
import tempfile
import time
 
= tempfile.TemporaryFile(dir=r"E:\data")
time.sleep(30)

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

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

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

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

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

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

?
1
2
3
4
5
6
7
import tempfile
import time
 
= tempfile.TemporaryFile(dir=r"E:\data",
                           prefix="你好呀",
                           suffix="我不好")
time.sleep(30)

执行一下看看:

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 进行映射。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import tempfile
import mmap
 
= tempfile.TemporaryFile()
f.write(b"hello, world")
# 映射之前需要移动一下光标
f.seek(00)
# mmap 映射,这里就映射 5 字节
= mmap.mmap(f.fileno(), 5)
m[:] = b"HELLO"
 
# 再次打印
print(f.read())
"""
b'HELLO, world'
"""

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

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

原文链接:https://mp.weixin.qq.com/s/6ICsZ-Kv8BNeKu-D4f-Q1g

延伸 · 阅读

精彩推荐
  • PythonPython PyQt5实现的简易计算器功能示例

    Python PyQt5实现的简易计算器功能示例

    这篇文章主要介绍了Python PyQt5实现的简易计算器功能,涉及Python PyQt5事件响应及数学运算等相关操作技巧,需要的朋友可以参考下...

    罗兵6292020-12-03
  • Python基于Python pip用国内镜像下载的方法

    基于Python pip用国内镜像下载的方法

    今天小编就为大家分享一篇基于Python pip用国内镜像下载的方法。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    mapw19936492021-03-04
  • Pythonmatplotlib更改窗口图标的方法示例

    matplotlib更改窗口图标的方法示例

    这篇文章主要介绍了matplotlib更改窗口图标的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    mighty136032021-09-01
  • Python浅谈python内置变量-reversed(seq)

    浅谈python内置变量-reversed(seq)

    下面小编就为大家带来一篇浅谈python内置变量-reversed(seq)。小编觉得挺不错的。现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    脚本之家3322020-11-19
  • Pythonpython中reduce()函数的使用方法示例

    python中reduce()函数的使用方法示例

    reduce() 函数会对参数序列中元素进行累积,下面这篇文章主要给大家介绍了关于python中reduce()函数的使用方法,文中通过示例代码介绍的非常详细,对大家...

    caimouse3362020-12-10
  • PythonPython内存泄漏和内存溢出的解决方案

    Python内存泄漏和内存溢出的解决方案

    这篇文章主要介绍了Python内存泄漏和内存溢出的解决方案,帮助大家维护后台进程,感兴趣的朋友可以了解下...

    posted28892020-09-26
  • Pythonpython常用模块详解

    python常用模块详解

    今天小编就为大家分享一篇关于举例讲解Python常用模块,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    LilGaage10382022-02-18
  • PythonPython使用poplib模块和smtplib模块收发电子邮件的教程

    Python使用poplib模块和smtplib模块收发电子邮件的教程

    smtplib模块一般我们比较熟悉、这里我们会来讲解使用smtplib发送SSL/TLS安全邮件的方法,而poplib模块则负责处理接收pop3协议的邮件,下面我们就来看Python使用...

    zhaoweikid5252020-08-31