亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
pppk之Recipe7.11(2)
[打印本頁]
作者:
zhuyubei
時間:
2012-08-27 21:30
標題:
pppk之Recipe7.11(2)
本帖最后由 zhuyubei 于 2012-08-27 21:49 編輯
上周5有些事,就沒寫。今天講創(chuàng)建臨時文件
上次我們講了一個Template的概念,同樣這個概念可以繼續(xù)用在臨時文件里。我們先復習下
# Create a temp file
my $sFileTemplate = "TestTempFileXXXX";
復制代碼
最后連續(xù)的XXXX是隨機的字符串。隨機的字符串必須在最后,且至少4位,而前面的是固定的字符串,可以由用戶指定。
臨時文件的創(chuàng)建。要用到tempfile函數(shù)。用法和tempdir很類似。只是返回的不再只是目錄或文件的名字
# Get filehandle in scalar context, file will be deleted
my $fhTmpFile = tempfile( $sFileTemplate, DIR => $sTmpDir );
print "FileHandle only: $fhTmpFile\n";
復制代碼
我們這里試著用DIR參數(shù)來控制臨時文件產(chǎn)生的目錄。這里有個很重要的地方。在標量環(huán)境下,tempfile直接返回的是文件的句柄而不是文件名!這里未必要記住。
作者:
zhuyubei
時間:
2012-08-27 21:40
那既然這里是文件句柄,而不是文件名。那在程序退出的時候,它會不會被刪除呢? 答案是被刪除了。而如果文件名字對用戶很重要呢?比如說名字里面有進程號,或是某個運行時變量名怎么辦呢?
這時候,你只要在列表環(huán)境下去調(diào)用tempfile這個函數(shù). 在先前返回句柄的基礎上,列表的第二個變量就接收了臨時文件在絕對路徑下的文件名。
# Get filehandle and filename, file will be keep
$sFileTemplate = "2222222FileXXXX";
my ( $fhTmpFile, $sTmpFileName ) = tempfile( $sFileTemplate, DIR => $sTmpDir );
print "FileName:$sTmpFileName\n";
print $fhTmpFile "Test\n";# write something
close ( $fhTmpFile ) or die "Can't close file $sTmpFileName:$!";
復制代碼
我們這里試著對文件進行了寫操作。注意在用列表環(huán)境下的tempfile,默認是不會刪除臨時文件的!我想庫作者認為你既然要臨時文件的名字了,也許會對該文件進一步操作。所以默認情況下,文件不被刪除。
如果你在調(diào)試程序的時候要保留文件,就用列表環(huán)境下的賦值好了。
作者:
zhuyubei
時間:
2012-08-27 21:47
但是如果你雖然需要臨時文件名做一些后續(xù)處理,但是希望在程序退出的時候,為了節(jié)省硬盤空間,該文件又能被刪除,那怎么辦呢?
這時候,你可以在調(diào)用tempfile的時候指定其參數(shù)UNLINK為1。
# Create temp file with more details
$sFileTemplate = "3333333FileXXXX";
# Specify extension and delete it always when program exits
( $fhTmpFile, $sTmpFileName ) = tempfile( $sFileTemplate, DIR => $sTmpDir,
SUFFIX => ".tmp", UNLINK => 1 ); # Not cleanup
復制代碼
注意是UNLINK而不是CLEANUP。刪除目錄用CLEANUP,刪除文件用UNLINK. 在指定UNLINK為1后,程序退出,臨時文件就會被刪除掉。
這里另一個參數(shù)SUFFIX也很有用,你可以指定臨時文件名的后綴。這里我們把它當作后綴名來使用。在加了后綴之后,可以避免臨時文件,被另一些進程當作正常的輸入文件來處理。
所以創(chuàng)建臨時文件主要問自己3個問題:
1. 需不需要用Template
2. 需不需要文件名
3. 需不需要被刪除
作者:
zhuyubei
時間:
2012-08-27 22:03
Python的臨時文件創(chuàng)建主要是由tempfile來完成。
如果你不需要文件名(和默認的Perl類似),那可以調(diào)用tempfile.TemporayFile()
noname = tempfile.TemporaryFile()
noname.write("sdda")
noname.seek(0)
print noname.read()
復制代碼
Perl里的無名文件句柄也可以這么用。
而如果你要文件名,那需要使用tempfile.NamedTemporaryFile(),然后調(diào)用其name屬性,來查看文件名
named = tempfile.NamedTemporaryFile();
print named.name
復制代碼
貌似這里臨時文件在程序退出后,是被強制刪除的。另外和上周講得臨時目錄一樣,該函數(shù)支持
'prefix', 'suffix', 'dir'
復制代碼
之類的參數(shù)。這里就不多說了。
明天我們講,文件鎖。
作者:
cdtits
時間:
2012-08-28 15:46
貌似有點堅持不住啊
作者:
zhuyubei
時間:
2012-08-28 15:50
回復
5#
cdtits
哈哈。畢竟沒這么簡單。我一直嘗試自己實踐,而不是照搬書里的代碼。所以會有些累
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2