2012-11-02 56 views
1

對不起,對於這個問題,我知道這是一個經常性的話題,但我無法解決我的問題,實際上這很容易描述:我想寫入一個將執行的輸出文件歸檔爲。我的意思是,我有一個這樣的輸出(遺憾的混亂):在python中編寫控制檯輸出到一個文件

.251.242.133|:80... connected.\r\nHTTP request sent, awaiting response... 200 OK\r\nLength: 2371567 (2.3M) [application/x-gzip]\r\nSaving to: `110907_ERP000591.tar.gz\'\r\n\r\n\r 0% [          ] 0   --.-K/s    \r 0% [          ] 23,003  104K/s    \r 3% [>          ] 82,863  184K/s    \r 8% [==>         ] 192,363  282K/s    \r15% [=====>         ] 371,943  411K/s    \r26% [=========>        ] 634,175  563K/s    \r39% [==============>      ] 925,283  680K/s    \r52% [===================>     ] 1,250,295 790K/s    \r63% [=======================>    ] 1,497,035 830K/s    \r73% [===========================>   ] 1,732,663 861K/s    \r81% [==============================>  ] 1,937,063 867K/s    \r88% [=================================>  ] 2,099,123 855K/s    \r95% [====================================> ] 2,268,483 847K/s    \r100%[======================================>] 2,371,567 849K/s in 2.7s \r\n\r\n2012-11-01 15:34:10 (849 KB/s) - `110907_ERP000591.tar.gz\' saved [2371567/2371567]\r\n\r\n110907_ERP000591/\r\n110907_ERP000591/1_110907_ERP000591_2_fastq.txt\r\n110907_ERP000591/1_110907_ERP000591_1_fastq.txt\r\n/home/travis/opt/bcbb/nextgen/tests/data/automated/../100326_FC6107FAAXX\r\n--2012-11-01 15:34:10-- http://chapmanb.s3.amazonaws.com/100326_FC6107FAAXX.tar.gz\r\nResolving chapmanb.s3.amazonaws.com (chapmanb.s3.amazonaws.com)... 205.251.242.133\r\nConnecting to chapmanb.s3.amazonaws.com (chapmanb.s3.amazonaws.com)|205.251.242.133|:80... connected.\r\nHTTP request sent, awaiting response... 200 OK\r\nLength: 7014592 (6.7M) [application/x-gzip]\r\nSaving to: `100326_FC6107FAAXX.tar.gz\'\r\n\r\n\r 0% [          ] 0   --.-K/s    \r 0% [          ] 17,163  77.9K/s    \r 0% [          ] 64,775  147K/s    \r 2% [          ] 174,843  263K/s    \r 5% [=>          ] 399,683  456K/s    \r12% [===>         ] 866,883  790K/s    \r25% [========>        ] 1,798,363 1.33M/s    \r45% [================>      ] 3,178,955 1.90M/s    \r65% [========================>    ] 4,592,803 2.41M/s    \r65% [========================>    ] 4,629,303 2.17M/s    \r67% [=========================>    ] 4,761,595 2.02M/s    \r74% [============================>   ] 5,245,423 2.03M/s    \r83% [===============================>  ] 5,862,435 2.08M/s    \r100%[======================================>] 7,014,592 2.46M/s in 2.7s \r\n\r\n2012-11-01 15:34:13 (2.46 MB/s) - 

所以,你可以看到,我有一個古怪的格式輸出,這是這個樣子的終端:


/home/travis/opt/bcbb/nextgen/tests/data/automated/../100326_FC6107FAAXX 
--2012-11-01 15:34:10-- http://chapmanb.s3.amazonaws.com/100326_FC6107FAAXX.tar.gz 
Resolving chapmanb.s3.amazonaws.com (chapmanb.s3.amazonaws.com)... 205.251.242.133 
Connecting to chapmanb.s3.amazonaws.com (chapmanb.s3.amazonaws.com)|205.251.242.133|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 7014592 (6.7M) [application/x-gzip] 
Saving to: `100326_FC6107FAAXX.tar.gz' 

100%[======================================>] 7,014,592 2.46M/s in 2.7s  

2012-11-01 15:34:13 (2.46 MB/s) - `100326_FC6107FAAXX.tar.gz' saved [7014592/7014592] 

好多了......我想用這種形式將輸出寫到一個文件中,所以我不能刪除\ r \ n或類似的東西,因爲這種方式會在每個步驟中出現一行下載。我只想寫一個帶有最終輸出的文件。

任何幫助?

編輯:

對不起,我本來應該更清楚:這不是一個命令的結果,但是,如下評論說,一個JSON文件的解析結果。您可以重現輸出:


import urllib 
import json 

string_to_write = json.loads(urllib.urlopen('https://travis-ci.org/jobs/3019024.json').read())['log'] 
+0

導致此輸出的命令究竟是什麼? –

+0

這應該基本上按原樣運行。意思是,如果你在Python中得到一個字符串s ='foo \ n \ rbar'',並用'open('outfile.txt,'w')write(s)'將其寫入到一個文件中,則文件應該包含這些行結尾,並在例如'cat'ed時正確呈現。 –

+0

儘管如果你在Windows上,寫入文件時,「二進制模式」和「文本模式」之間有一個braindead區別。所以你可能需要使用「wb」或「w」模式,不確定。請參閱Python [關於讀取和寫入文件的文檔]中的註釋(http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files)。 –

回答

1

這應該工作:

re.sub(r"(?m)^.*\r(?!$)", "", text) 

(?m)標誌表明這是一個多正則表達式,從而使^$匹配每行的開頭和結尾,而不是整個文本。

所以,我們從線^的開始匹配一切.*直至幷包括一個回車\r,除非回車後面緊跟行(?!$)結束 - 因爲這將是如果您的文本包含CRLF換行符。然後,用空字符串替換匹配。

+0

這一個工作!非常感謝你! – guillemch

+0

我有'\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n2012 -11-01 15:34:13(2.46 MB/s)'這真的是好結果嗎? – Liso

0

看起來像是在* NIX系統上。如果是通過命令行運行progn(這可能真的是python myscript.py)產生這個輸出,你可以很容易地做到這一點:

progn > logfile 

這樣,progn輸出保存到logfile不剝任何字符。

0

如果你只想刪除哪些隱藏的終端,那麼你可以試試這個 - >

# t is your text 
''.join([i for i in t.split('\r') if i.startswith('\n') or i.startswith('100%')]) 

解決方案是棘手,但我認爲它可能會爲你工作(!)。