實(shí)際案例
某項(xiàng)目中,我們從傳感器采集數(shù)據(jù)镜悉,每收集到1G數(shù)據(jù)后祟辟,做數(shù)據(jù)分析,最終只保存分析結(jié)果侣肄。這樣很大的臨時(shí)數(shù)據(jù)如果常駐內(nèi)存旧困,將消耗大量?jī)?nèi)存資源,我們可以使用臨時(shí)文件存儲(chǔ)這些臨時(shí)數(shù)據(jù)(外部存儲(chǔ))稼锅。
臨時(shí)文件不用命名吼具,且關(guān)閉后會(huì)自動(dòng)刪除。
解決方案:使用標(biāo)準(zhǔn)庫(kù)中tempfile下的TemporaryFile矩距,NamedTemporaryFile拗盒。
代碼如下:
# -*- coding: utf-8 -*-
from tempfile import TemporaryFile, NamedTemporaryFile
# TemporaryFile創(chuàng)建的臨時(shí)文件,只能由f訪問(wèn)
f = TemporaryFile()
f.write('abcdef' * 100000)
f.seek(0)
# 每次讀取一部分锥债,否則內(nèi)存消耗過(guò)大
print f.read(100)
# NamedTemporaryFile創(chuàng)建的臨時(shí)文件可在文件系統(tǒng)中找到
ntf = NamedTemporaryFile()
# 臨時(shí)文件所在文件路徑
print ntf.name
運(yùn)行結(jié)果為:
abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd
c:\users\admin\appdata\local\temp\tmpcnn26b
在NamedTemporaryFile中陡蝇,我們可以設(shè)置參數(shù)delete=False關(guān)閉自動(dòng)刪除機(jī)制,這樣我們?cè)趧?chuàng)建一個(gè)新的臨時(shí)文件時(shí)哮肚,原來(lái)的臨時(shí)文件依舊存在登夫。