亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2238 | 回復(fù): 8
打印 上一主題 下一主題

pppk之Recipe7.11(1) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-08-23 20:23 |只看該作者 |倒序瀏覽
今天我決定說說Recipe7.11,使用臨時文件。最近正好用到了這個模塊,就說說吧。分兩天完成。

今天的引用語是
  1. 康先生之教,特標(biāo)專精、涉獵二條;無專精則不能成,無涉獵則不能通也    --梁啟超
復(fù)制代碼
這幾天的項目有點趕。希望下周好些。

論壇徽章:
0
2 [報告]
發(fā)表于 2012-08-23 20:29 |只看該作者
最近項目里把在數(shù)據(jù)load進(jìn)去數(shù)據(jù)庫的時候發(fā)現(xiàn),在小文件很多的時候,性能很不好。但是如果把文件合并到一定的行數(shù),效率比較優(yōu)。同時由于那些小文件的文件名很重要,而且tracking數(shù)據(jù)庫里也需要存的是那些小文件的文件名。所以這時候,我們就采用把文件合并到一個臨時文件里去,在臨時文件的loading成功或失敗的時候,對原始的小文件進(jìn)行相應(yīng)處理。

這就要用到Perl的臨時文件模塊。這是標(biāo)準(zhǔn)庫提供的。
  1. use File::Temp qw( tempfile tempdir );
復(fù)制代碼
其中我們我們這里會涉及到臨時文件和目錄的創(chuàng)建。各位視自己的情況來使用。今天先講講tempdir

論壇徽章:
0
3 [報告]
發(fā)表于 2012-08-23 20:36 |只看該作者
在Linux下使用tempdir來創(chuàng)建臨時目錄最簡單的方法如下.
  1. # Module File::Temp can support creating temporary files / dirs
  2. # Create temp dir, will not delete it after exit
  3. # Return the dirname
  4. my $sTmpDir = tempdir( );
  5. print "Temporary dir: $sTmpDir\n";
復(fù)制代碼
這個函數(shù)會返回臨時目錄名的絕對路徑。默認(rèn)情況下,會在/tmp這個Linux默認(rèn)存放臨時文件的目錄下生產(chǎn)臨時目錄。我們可以看到目錄名是一串隨機(jī)的字符串, 諸如
  1. /tmp/5ZaWrFtFtP /tmp/lDZRFGeyOP /tmp/VQkM0C2YUP
復(fù)制代碼
那這些目錄在程序退出后,會不會被刪除呢?我實踐下來,默認(rèn)是不會。這和創(chuàng)建臨時文件的情況是不一樣的。
那如果我們在正式使用的時候希望目錄能被刪除又如何呢?這里就要使用CLEANUP參數(shù),并將其值賦為1
  1. # Create temp dir, will not delete it after exit
  2. my $sTmpCleanDir = tempdir( CLEANUP => 1 );
  3. print "Temporary dir will be removed: $sTmpCleanDir\n";
復(fù)制代碼

論壇徽章:
0
4 [報告]
發(fā)表于 2012-08-23 20:46 |只看該作者
剛剛說到了,默認(rèn)的臨時目錄是創(chuàng)建在/tmp之上的。但是如果我們希望在指定目錄創(chuàng)建臨時目錄以更好地進(jìn)行管理,那我們要如何完成呢?

如果你確定要這么做,那要在創(chuàng)建臨時文件的時候用DIR參數(shù)指定你所需要的路徑
  1. # Create temp dir at specific dir and this dir must be created ahead
  2. my $sTestDir = "/tmp/test";
  3. $sTmpDir = tempdir( DIR => $sTestDir );
  4. print "Temporary dir at test dir $sTestDir: [$sTmpDir]\n";
復(fù)制代碼
但是這里要注意的是,上面DIR對應(yīng)的路徑必須存在,否則創(chuàng)建臨時文件就會失敗。所以比較保險的方法是用mkpath之類的方法,先確保目標(biāo)的目錄存在。因為臨時文件用到的目錄本身就有一定的隨意性,所以管理起來還是要很小心。

論壇徽章:
0
5 [報告]
發(fā)表于 2012-08-23 21:01 |只看該作者
上文還提到,臨時目錄的目錄名是個隨機(jī)的字符串。那如果我希望這個目錄能有些特征怎么辦呢?比如我希望目錄里有對應(yīng)的進(jìn)程號,或是我希望目錄里有明確的名字以區(qū)別其他程序產(chǎn)生的臨時文件。

這里就要引入一個叫Template的概念。也就說,我們可以對臨時目錄的名字用Template加以控制。這樣創(chuàng)建出來的所有的臨時目錄或文件都具有Template的pattern

看這句語句,我們這里創(chuàng)建了一個Templae。一個Template由2部分組成,確定性字符串和隨機(jī)字符串,隨機(jī)字符串位于目錄名的結(jié)尾,記住必須是結(jié)尾!
  1. my $sDirTemplate = "TestTmpDirXXXX";
復(fù)制代碼
隨機(jī)字符串由連續(xù)的X字符來表示,必須連續(xù)且長度大于等于4。確定星字符串位于隨機(jī)字符串的前面,你可以用自己希望的模式來指定它。如果你用了變量,注意加大括號,以和后面的隨機(jī)字符XXXX區(qū)別開來。
  1. my $sDirTemplate = "${$}XXXX";  
復(fù)制代碼
這里就用了進(jìn)程號做確定性字符串

在確定好模式后,我們要把它傳給tempdir來創(chuàng)建臨時目錄.
  1. # The template must end with at least 4 'X' characters
  2. my $sDirTemplate = "TestTmpDirXXXX";  
  3. $sTmpDir = tempdir( $sDirTemplate, DIR => $sTestDir );

  4. # /tmp/test/TestTmpDirvquC
  5. print "Temporary dir with template at test dir $sTestDir: [$sTmpDir]\n";
復(fù)制代碼
這里我們可以看到,臨時目錄的名字是TestTmpDirvquC。的確就是我們希望的。

明天講臨時文件的創(chuàng)建,細(xì)節(jié)會稍微多一點

論壇徽章:
0
6 [報告]
發(fā)表于 2012-08-23 21:16 |只看該作者
而對于Python來說,主要使用模塊tempfile模塊來創(chuàng)建臨時目錄和文件

要創(chuàng)建臨時目錄,最簡單的就是
  1. dname = tempfile.mkdtemp()
復(fù)制代碼
它同樣在/tmp下創(chuàng)建臨時目錄。但是和Perl不一樣的是,它的文件名不是完全隨機(jī)的。它以tmp開頭,后6位隨機(jī)
  1. '/tmp/tmpLQ3943'
復(fù)制代碼
如需要指定臨時文件創(chuàng)建的位置,則和perl類似,指定dir參數(shù)即可比如
  1. dname = tempfile.mkdtemp(dir='/tmp/test')
復(fù)制代碼
則返回'/tmp/test/tmpFDznqS''

那我們?nèi)绾沃付ㄆ銽emplate呢?這一點Python比Perl稍微好些,你可以在隨機(jī)目錄名的前后都加你想要的字符串。用法就是指定prefix和suffix的值
  1. dname = tempfile.mkdtemp(dir='/tmp/test',prefix="PPP_",suffix=".SSS")
復(fù)制代碼
返回目錄名字是/tmp/test/PPP_dd6sxe.SSS

也就是說,中間那6個隨機(jī)字符串的值你不能控制。而且你不能像Perl那樣,改變隨機(jī)字符串的長度。比如在Perl里你可以這樣寫Template,"ABCXXXXXXX"。我沒測試過X的上限值,但至少是可變的

最后一點,Python告訴我們:
  1.     Caller is responsible for deleting the directory when done with it.
復(fù)制代碼
看來,就是要讓我們自己做主了。好吧。

今天就寫到這

論壇徽章:
2
CU大;照
日期:2013-04-17 11:46:28CU大;照
日期:2013-04-17 11:46:39
7 [報告]
發(fā)表于 2012-08-24 10:41 |只看該作者
呵呵,堅持學(xué)習(xí)...

論壇徽章:
46
15-16賽季CBA聯(lián)賽之四川
日期:2018-03-27 11:59:132015年亞洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49雙魚座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亞冠之布里斯班獅吼
日期:2015-07-13 10:44:56
8 [報告]
發(fā)表于 2012-08-27 21:06 來自手機(jī) |只看該作者
我來催賬了啦

論壇徽章:
0
9 [報告]
發(fā)表于 2012-08-27 21:48 |只看該作者
回復(fù) 8# zhlong8


    哈哈,我正好在寫
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP