2015-10-09 53 views
3

我有一個大的文本文件,它是一些代碼的輸出,它包含數字列表。該文件中的列表的格式如下讀取文件包含值列表到數組

[ 11.42102518 3.3538624 231.82137052 352.12777653] [ 12.68274035 2.84982539 292.99135783 331.74058558] [ 11.34657161 3.38423623 265.82486527 335.52547905] [ 12.74354078 3.57487634 241.38692542 322.61793392] [ 12.34540891 7.43226428 241.87210696 364.56618065] [ 12.11139764 4.19664745 239.1656334 321.70798174] [ 12.78659285 5.29236544 232.36062356 315.21861344] [ 12.69345477 3.21991939 285.64027138 356.25664941] [ 12.50813292 3.81440083 277.67523696 334.8178125 ] [ 13.1380115  2.84102649 270.39461828 357.04828265] [ 14.07759576 2.32715376 287.91432844 326.39725223] [ 11.85596781 4.0823778 290.16288598 353.67141937] [ 15.40525653 2.91725879 261.31334931 362.72949817] [ 15.01504576 2.46403931 275.26133082 333.77638185] [ 15.28245578 2.98091548 247.72494962 311.64421065] [ 13.49572046 2.52735399 265.58225678 332.79688739] [ 12.82575874 3.98127768 230.90060671 312.34328907] [ 16.76159178 4.02880401 281.66098464 320.10349045] 
每個500所* 20列出後

有一個新的線\n分離。

我想將它們讀入Nx4。我不知道文件中存在列表的確切數量。我該怎麼做?

+0

那他們代表什麼?這些列表是否爲單獨的行,並且它們始終包含相同數量的元素?此文件中是否有回車符? – EdChum

+0

@EdChum它們是蒙特卡洛馬爾可夫鏈代碼的輸出,即「emcee」,並且所有列表具有相同的長度和四個元素。代碼在每次迭代中生成20 * 500個元素列表並附加到文件中。 – Dalek

回答

0

由於輸入文件包含列表,其中每個列表包含20只列出4個要素,我想所有的人都用4列,最好的辦法我讀入一個數組列表的數目不詳跨越到目前爲止來到所有列表結合起來,做一個大陣列,4列是如下:

f = open('sampler_chain.dat').read() 

ndim=4 
import numpy as np 
import re 
pattern = re.compile("^[0-9]") 
data = np.zeros((1,ndim),float) 
i=0;dl=[] 
for x in f.split(): 
     if pattern.match(x): 
     m = re.match(r"(\d+)\.(\d+)", x) 
     x=m.group(0) 
     print x 
     if ((i/4==0) and (i%4<4)): 
      data[i/4,i%4]=float(x) 
     elif ((i/4>0) and (i%4<4)): 
       dl.append(float(x)) 
     if (i%4==3) and (i/4>0): 
      data=np.append(data,[dl],axis=0) 
      dl=[] 
     i+=1 
     else: 
     continue 

的問題是,這種方法是不夠快,讀取數據的一個巨大的文件...

0

首先,您需要從文件的開頭和結尾刪除[,]。其次,分割數組,最後一步拆分元素並放入數組緩衝區。

buff = [] 
for line in open("file.txt"): 
    for arr in line[1:-1].strip().split("]\t[") 
     row = [] 
     for el in arr.strip().split("\t")): 
      row.append(float(el)) 
     buff.append(row) 
1

此代碼將所有數字存儲在一個數組中!即時通訊不知道,如果那就是你真正想要的! :)

fh = open('text.txt').read() 

    pattern = re.compile("^[0-9]") 
    _array = [] 

    for x in fh.split(): 
     x = x.replace(']','') 
     if pattern.match(x): 
      _array.append(float(x)) 
     else: 
      continue 

    fh.close() 
    print(_array) 
+0

你的答案有幾個錯誤,首先它不返回數組。其次'_array'列表中的元素是'string',然後最後它返回一個大的列表糾結列表。 – Dalek

+0

對不起,兄弟...現在試試 – Jedani

+0

我編輯了上面的代碼 – Jedani

相關問題