2013-11-27 192 views
0

我是python初學者,我試圖從我的數據文件中提取矩陣。該文件包含有關測量的一些參數的信息,例如。文字+數字。我想提取位於單詞「#UBI:」和「#translation」之間的矩陣。該文件包含數百個這些矩陣。因此,這裏是我的代碼,我試圖運行 - 它給了我一定的效果,但它似乎有一個無限循環 - 它從未停止:在文本文件中查找矩陣

inF = open("C:/Python27/allgrainmap3.map") 

line=inF.readline() 

while True: 
    inF = open("C:/Python27/allgrainmap3.map") 
    outF = open("matrices.txt", "w") 
    keepCurrentSet = False 
    for line in inF: 

     if line.startswith("#translation"): 
      keepCurrentSet = False 

     if keepCurrentSet: 
      outF.write(line) 

     if line.startswith("#UBI:"): 
      keepCurrentSet = True 

    if not line: break 

inF.close() 
outF.close() 

的文件塊的樣子:

translation 4141 14141 
bla bla 
bla bla 
UBI: 1 2 3 4 5 6 7 8 9 # this is the matrix I want 

翻譯... 在adition中 - 我只想要我的矩陣ei的最後一列包含(3 6 9)的矢量在這裏。

回答

0

您正在打開輸入文件在代碼中的兩個不同的地方,這似乎不是你想要做的。

我也看不出while True:這想必是無限循環的原因的目的...

在我看來,這將工作

inF = open("C:/Python27/allgrainmap3.map") 
outF = open("matrices.txt", "w") 
keepCurrentSet = False 
for line in inF: 

     if line.startswith("#translation"): 
      keepCurrentSet = False 

     if keepCurrentSet: 
      outF.write(line) 

     if line.startswith("#UBI:"): 
      keepCurrentSet = True 

inF.close() 
outF.close() 

現在,如果你想在將其寫入outfile之前,只保留最後一列:

if keepCurrentSet: 
    vector = line[9::3] 
    outF.write(vector) 

這隻適用於您當前的矩陣:如果數字列更改您將不得不計算哪些元素保留在切片中。

編輯:如果你有一個數字,而不是在矩陣中個位數:

line = "UBI: 101 223 33456 40 51 63 75 86 99" 
fields = line.split() 
vector = fields[3::3] 
print(vector) 

只有一個3x3矩陣的作品。

+0

非常感謝,第一件事幫了我。但第二個 - 與此向量無法正常工作。它不會將數字視爲數字,而是視爲字符串,我不知道爲什麼。因此,對於9 :: 3,它需要每個數字的第三位數字......你認爲有可能有一種方法,例如如何將這些數字寫入輸出文件?這可能有助於解決這個問題。 – user3041107

+0

編輯。你仍然必須適應不同的矩陣大小。 – zlr

+0

這也沒有工作,不知道爲什麼。對我來說,最簡單的解決方案就是打印該行的最後11個字符(因爲數字有9位數字,如:-1,389348934)。所以如果我只打印最後11個字符,我也有數字和符號。但我不知道該怎麼做。 – user3041107