日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python tempfile cleanup_python tempfile 模块---生成临时文件和目录

發(fā)布時(shí)間:2023/12/19 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python tempfile cleanup_python tempfile 模块---生成临时文件和目录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 tempfile介紹

tempfile 模塊中常用的函數(shù),如下表所示。

tempfile 模塊函數(shù)功能描述tempfile.TemporaryFile(mode=‘w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None)創(chuàng)建臨時(shí)文件。該函數(shù)返回一個(gè)類文件對(duì)象,也就是支持文件 I/O。

tempfile.NamedTemporaryFile(mode=‘w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True)創(chuàng)建臨時(shí)文件。該函數(shù)的功能與上一個(gè)函數(shù)的功能大致相同,只是它生成的臨時(shí)文件在文件系統(tǒng)中有文件名。

tempfile.SpooledTemporaryFile(max_size=0, mode=‘w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None)創(chuàng)建臨時(shí)文件。與 TemporaryFile 函數(shù)相比,當(dāng)程序向該臨時(shí)文件輸出數(shù)據(jù)時(shí),會(huì)先輸出到內(nèi)存中,直到超過 max_size 才會(huì)真正輸出到物理磁盤中。

tempfile.TemporaryDirectory(suffix=None, prefix=None, dir=None)生成臨時(shí)目錄。

tempfile.gettempdir()獲取系統(tǒng)的臨時(shí)目錄。

tempfile.gettempdirb()與 gettempdir() 相同,只是該函數(shù)返回字節(jié)串。

tempfile.gettempprefix()返回用于生成臨時(shí)文件的前綴名。

tempfile.gettempprefixb()與 gettempprefix() 相同,只是該函數(shù)返回字節(jié)串。

提示:表中有些函數(shù)包含很多參數(shù),但這些參數(shù)都具有自己的默認(rèn)值,因此如果沒有特殊要求,可以不對(duì)其傳參。

2 創(chuàng)建臨時(shí)文件

2.1 TemporaryFile

該函數(shù)返回一個(gè)類文件對(duì)象,用于臨時(shí)數(shù)據(jù)保存(實(shí)際上對(duì)應(yīng)磁盤上的一個(gè)臨時(shí)文件)。

def TemporaryFile(mode='w+b', buffering=-1, encoding=None,

newline=None, suffix=None, prefix=None,

dir=None, *, errors=None)

生成的對(duì)象可以用作上下文管理器。完成文件對(duì)象的上下文或銷毀后(文件對(duì)象被 close 或者被 del),臨時(shí)文件將從文件系統(tǒng)中刪除。

mode 參數(shù)默認(rèn)值為 w+b,采用二進(jìn)制模式,可以進(jìn)行讀寫

buffering 用于設(shè)置緩沖策略。0:關(guān)閉緩沖(僅允許在二進(jìn)制模式下),1:行緩沖(僅在文本模式下可用),>1 的整數(shù):指定塊緩沖區(qū)的大小(以字節(jié)為單位)。如果沒有給出 buffering 參數(shù),采用默認(rèn)緩沖策略

encoding 是用于解碼或編碼文件的編碼的名稱

prefix 指定了臨時(shí)文件名的前綴

suffix 指定了臨時(shí)文件名的后綴

dir 用于設(shè)置臨時(shí)文件默認(rèn)的保存路徑

返回的類文件對(duì)象有一個(gè) file 屬性,它指向真正操作的底層的 file 對(duì)象

from tempfile import TemporaryFile

temp = TemporaryFile(dir='/home/skx/pra')

print(temp)

print(temp.name)

'''

TemporaryFile類的構(gòu)造方法,其返回的還是一個(gè)文件對(duì)象。但這個(gè)文件對(duì)象特殊的地方在于

1. 對(duì)應(yīng)的文件沒有文件名,對(duì)除了本程序之外的程序不可見

2. 在被關(guān)閉的同時(shí)被刪除

所以上面的兩句打印語句,輸出分別是一個(gè)文件對(duì)象,以及一個(gè)(并不是文件名)

'''

# 向臨時(shí)文件中寫入內(nèi)容

temp.write(b'hello\nworld')

temp.seek(0) # 將文件指針移動(dòng)到頭部,準(zhǔn)備讀取文件

print(temp.read())

temp.close() # 關(guān)閉文件的同時(shí)刪除文件

# 通過with語句創(chuàng)建臨時(shí)文件,with會(huì)自動(dòng)關(guān)閉臨時(shí)文件

with TemporaryFile() as fd:

fd.write("我最棒".encode('utf-8'))

fd.seek(0)

print(fd.read().decode('utf-8'))

3

b'hello\nworld'

我最棒

注意:mode 參數(shù)默認(rèn)值為 w+b,寫 str 時(shí)每次需要轉(zhuǎn)換為 binary 再寫入,這樣很麻煩,可以指定打開方式為 w+,這樣就可以直接進(jìn)行 str 類型的讀寫了

讀取配置文件放入臨時(shí)文件

example.ini

[DEFAULT]

ip = 172.0.0.1

port = 22

[bitbucket.org]

user = Atlan

conf_tempfile.py

#coding=utf-8

import configparser

from tempfile import TemporaryFile

conf = configparser.ConfigParser()

conf.read('example.ini')

with TemporaryFile(mode='w+') as fd:

conf.write(fd) # 注意這里的用法

fd.seek(0)

print(fd.read())

2.2 NamedTemporaryFile

此函數(shù)執(zhí)行的操作與 TemporaryFile() 完全相同,但是創(chuàng)建的臨時(shí)文件有文件名,在文件系統(tǒng)中可以找到,因此可以多個(gè)進(jìn)程同時(shí)訪問

def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None,

newline=None, suffix=None, prefix=None,

dir=None, delete=True, *, errors=None)

該函數(shù)多了一個(gè) delete 參數(shù),用于指定類文件對(duì)象 close 或者被 del 之后,是否也一同刪除磁盤上的臨時(shí)文件(當(dāng) delete = True 的時(shí)候,行為與 TemporaryFile 一樣)。

import os

from tempfile import NamedTemporaryFile

# 指定文件以 "head_" 開頭,以"_tail"結(jié)尾

temp = NamedTemporaryFile(suffix="_tail", prefix="head_", dir='/home/skx/pra',delete=False)

try:

print('temp:', temp)

print('temp.name:', temp.name)

finally:

temp.close()

# 指定了delete,文件對(duì)象 close 或者被 del 之后,磁盤文件不會(huì)被刪除

print('Exists after close:', os.path.exists(temp.name))

運(yùn)行結(jié)果:

temp:

temp.name: /home/skx/pra/head_0dsw2361_tail

Exists after close: True

指定 delete=False,文件對(duì)象 close 或者被 del 之后,不刪除磁盤上的臨時(shí)文件,在指定的目錄中可以看到文件如下

2.3 SpooledTemporaryFile

tempfile.SpooledTemporaryFile(max_size=0, mode='w+b', buffering=-1,

encoding=None, newline=None,

suffix=None, prefix=None, dir=None, *, errors=None)

此函數(shù)執(zhí)行的操作與 TemporaryFile() 完全相同,但會(huì)將數(shù)據(jù)緩存在內(nèi)存中,直到文件大小超過 max_size,或調(diào)用文件的 fileno() 方法為止,此時(shí)數(shù)據(jù)會(huì)被寫入磁盤。

2.4 mkstemp

tempfile.mkstemp(suffix=None, prefix=None, dir=None, text=False)

prefix 指定了臨時(shí)文件名的前綴

suffix 指定了臨時(shí)文件名的后綴

dir 用于設(shè)置臨時(shí)文件默認(rèn)的保存路徑

text 指定了是否以文本的形式來操作文件,默認(rèn)為False,表示以二進(jìn)制的形式來操作文件。

mkstemp() 返回一個(gè)元組,元組中第一個(gè)元素是句柄,它是一個(gè)系統(tǒng)級(jí)句柄,指向一個(gè)打開的文件(等同于 os.open() 的返回值),第二元素是該文件的絕對(duì)路徑。

文件使用完后文件不會(huì)自動(dòng)清除,需要手動(dòng)清理。

import tempfile

tmp_f = tempfile.mkstemp(dir="/home/skx/pra/")

print(tmp_f)# (3, '/home/skx/pra/tmp58do2j53')--> tmp_f[0] 是句柄,tmp_f[1] 是文件路徑

fd = tmp_f[1]

with open(fd, 'w+') as f:

f.write('Hello world')

f.seek(0)

print(f.read())

運(yùn)行結(jié)果

(3, '/home/skx/pra/tmp58do2j53')

Hello world

3 創(chuàng)建臨時(shí)目錄

3.1 TemporaryDirectory

tempfile.TemporaryDirectory(suffix=None, prefix=None, dir=None)

prefix 指定了臨時(shí)文件名的前綴

suffix 指定了臨時(shí)文件名的后綴

dir 用于設(shè)置臨時(shí)文件默認(rèn)的保存路徑

此函數(shù)會(huì)安全地創(chuàng)建一個(gè)臨時(shí)目錄。此函數(shù)返回的對(duì)象可用作上下文管理器。完成上下文或銷毀臨時(shí)目錄對(duì)象后,新創(chuàng)建的臨時(shí)目錄及其所有內(nèi)容自動(dòng)將從文件系統(tǒng)中刪除。

也可以調(diào)用 cleanup() 方法手動(dòng)清理目錄。

import os

import tempfile

with tempfile.TemporaryDirectory(suffix='_tail', prefix='head_') as dir_name:

print(dir_name)

print(os.path.exists(dir_name))

運(yùn)行結(jié)果

/tmp/head_gtbt2gkw_tail

False

3.2 mkdtemp

def mkdtemp(suffix=None, prefix=None, dir=None)

prefix 指定了臨時(shí)文件名的前綴

suffix 指定了臨時(shí)文件名的后綴

dir 用于設(shè)置臨時(shí)文件默認(rèn)的保存路徑

以最安全的方式創(chuàng)建一個(gè)臨時(shí)目錄,創(chuàng)建該目錄時(shí)不會(huì)有競(jìng)爭(zhēng)的情況。該目錄只能由創(chuàng)建者讀取、寫入和搜索。返回新目錄的絕對(duì)路徑名。

用戶用完臨時(shí)目錄后需要自行將其刪除。

import os

import tempfile

dir_name = tempfile.mkdtemp(suffix='_tail', prefix='head_', dir='/tmp')

print(dir_name)

# 需要手動(dòng)清理

os.removedirs(dir_name)

運(yùn)行結(jié)果

/tmp/head_kn9uoe1z_tail

原文鏈接:https://blog.csdn.net/happyjacob/article/details/112385665

總結(jié)

以上是生活随笔為你收集整理的python tempfile cleanup_python tempfile 模块---生成临时文件和目录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。