2014-06-20 40 views
-1

我有一個文本文件,其中包含如下所示的表格。來自其他文本的部分對我來說不是很有意思。從txt文件中讀取大塊表格

TMP [%]  [KT]  [1/dm]  [SF] 
1 0.10020 -0.0000  -60.0  0.0000 
2 14.12826  0.0000  0.0  0.0000 
3 4.00802 -120.3636  -6.0 191.5646 
4 4.80962  0.0000  0.0  0.0000 
    ..... 

我想只提取文本的這部分,只提取前3列。我寫了一個類似的代碼:

import codecs 
f = codecs.open("dmp.txt", "r",'utf-16-le') 
fr = f.readlines() 
f.close() 
for line in fr: 
    if line.startswith("TMP")... 

但是,我無法弄清楚如何讀取這個數據列明智和只有前3列。有任何想法嗎?

回答

0
for line in fr: 
    v = line.split() 
    print " ".join(v[:3]) 

給出:

TMP [%] [KT] 
1 0.10020 -0.0000 
2 14.12826 0.0000 
3 4.00802 -120.3636 
4 4.80962 0.0000 
0

您可以使用正則表達式:

import codecs 
import re 
f = codecs.open("dmp.txt", "r",'utf-16-le') 
fr = f.readlines() 
f.close() 
for line in fr: 
    if not line.startswith('TMP'): 
     print re.findall('-?[0-9]+\.?[0-9]*', line)[:3] 

這將輸出:

['1', '0.10020', '-0.0000'] 
['2', '14.12826', '0.0000'] 
['3', '4.00802', '-120.3636'] 
['4', '4.80962', '0.0000'] 
+0

感謝您的想法。但是,這也會在文本文件中打印不屬於此表格的其他數字。如果我知道TMP的數量,例如我知道我說4行(1 ... 4)。我可以做些什麼來直接讀取塊嗎?我想進一步使用這些數字。 – user741592

+0

@ user741592最後一行的結尾是'[:3]',這意味着取前3個元素。你可以用'[A:B]'來代替,其中'A'是第一個元素的索引(從0開始),'B'是最後一個元素後面的索引。有關更多信息,請參閱[切片](http://stackoverflow.com/questions/509211/pythons-slice-notation) – daouzli

+0

我不確定您的意思*直接讀取塊* – daouzli

0
with open("dmp.txt") as f: 
    f.next() 
    for x in range(4): 
     lines += f.next().split()[0:3] 
    print lines 

['1', '0.10020', '-0.0000', '2', '14.12826', '0.0000', '3', '4.00802', '-120.3636', '4', '4.80962', '0.0000']