Java教程

24. 使用临时文件

本文主要是介绍24. 使用临时文件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

例如,在某项目中,我们从传感器采集数据,每收集到1G数据后,做数据分析,最终只保存分析结果。这样很大的临时文件如果常驻内存,将消耗大量内存资源。

要求:使用临时文件存储这些临时数据(外部存储)。临时文件不用命名,且关闭后会自动被删除。

解决方案:

使用标准库中的TemporaryFile(临时文件)以及NamedTemporaryFile(命名临时文件)。


  • 对于TemporaryFile()
TemporaryFile(mode='w+b', buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None)

创建并返回一个临时文件,该文件在文件系统中无法访问。mode默认是二进制可读可写。

  • 对于NamedTemporaryFile()
NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True)

创建并返回一个命名的临时文件,该文件在文件系统中可访问,这是Python库对临时文件进行操作的。delete=True表示文件在关闭时删除。

  • 对于os.open()方法:
os.open(path, flags, mode=511, *, dir_fd=None)

为低级别IO打开一个文件,返回一个文件描述符(整数)。当flagsO_TMPFILE时会创建一个临时文件,关闭时删除,这是操作系统对临时文件进行操作。且指定路径为目录(不是文件),即在该目录下创建临时文件。


  • 方案示例:
# df -h Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        18G  5.8G   13G  33% /             #当前已使用5.8Gdevtmpfs        900M     0  900M   0% /dev
tmpfs           910M     0  910M   0% /dev/shm
tmpfs           910M  9.5M  901M   2% /run
tmpfs           910M     0  910M   0% /sys/fs/cgroup
/dev/sda1       197M  148M   50M  75% /boot
tmpfs           182M     0  182M   0% /run/user/0

>>> from tempfile import TemporaryFile, NamedTemporaryFile>>> tf = TemporaryFile()>>> tf.write(b'*' * 1024 * 1024 * 1024)             #写入1G到临时文件中1073741824

# df -h Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        18G  6.8G   12G  38% /             #已使用增加1Gdevtmpfs        900M     0  900M   0% /dev
tmpfs           910M     0  910M   0% /dev/shm
tmpfs           910M  9.5M  901M   2% /run
tmpfs           910M     0  910M   0% /sys/fs/cgroup
/dev/sda1       197M  148M   50M  75% /boot
tmpfs           182M     0  182M   0% /run/user/0

>>> tf.close()              #关闭临时文件

# df -h Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        18G  5.8G   13G  33% /             #已使用恢复devtmpfs        900M     0  900M   0% /dev
tmpfs           910M     0  910M   0% /dev/shm
tmpfs           910M  9.5M  901M   2% /run
tmpfs           910M     0  910M   0% /sys/fs/cgroup
/dev/sda1       197M  148M   50M  75% /boot
tmpfs           182M     0  182M   0% /run/user/0


>>> ntf = NamedTemporaryFile()>>> ntf.name'/tmp/tmpvkj005cs'              #该临时文件名

# ll '/tmp/tmpvkj005cs'-rw------- 1 root root 0 Sep 12 10:17 /tmp/tmpvkj005cs

NamedTemporaryFile()创建的临时文件名是通过suffix=None, prefix=None, dir=None这几个参数来决定的。

>>> import tempfile>>> tempfile.gettemp
tempfile.gettempdir(      tempfile.gettempdirb(     tempfile.gettempprefix(   tempfile.gettempprefixb(  >>> tempfile.gettempdir()               #默认目录'/tmp'>>> tempfile.gettempprefix()                #默认前缀'tmp'

这些默认参数都是可修改的。

>>> ntf.close()

# ll '/tmp/tmpvkj005cs'ls: cannot access /tmp/tmpvkj005cs: No such file or directory

临时文件关闭后会自动删除,这是因为delete参数默认为True。

通常情况下使用TemporaryFile创建临时文件即可,但是在多进程都想访问同一临时文件时,使用NamedTemporaryFile创建命名临时文件更为合适。


这篇关于24. 使用临时文件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!