Python 读取文件时,会将值列表放入数组中

Python 读取文件时,会将值列表放入数组中,python,list,numpy,Python,List,Numpy,我有一个大的文本文件,它是一些代码的输出,它包含数字列表。文件中列表的格式如下所示 [ 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

我有一个大的文本文件,它是一些代码的输出,它包含数字列表。文件中列表的格式如下所示

[  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
的numpy数组中。我不知道文件中存在列表的确切数量。如何操作?

首先,您需要从文件的开头和结尾删除[,]。第二步,拆分数组,最后一步拆分元素并放入数组缓冲区

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)

此代码将所有数字存储在一个数组中!!我不确定这是否是你真正想要的!:)


由于输入文件包含未知数量的列表列表,其中每个列表包含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
f=open('sampler_chain.dat')。read()
ndim=4
将numpy作为np导入
进口稀土
模式=重新编译(“^[0-9]”)
数据=np.零((1,ndim),浮点)
i=0;dl=[]
对于f.split()中的x:
如果模式匹配(x):
m=重新匹配(r“(\d+)\(\d+),x)
x=m.组(0)
打印x
如果((i/4==0)和(i%40)和(i%40):
data=np.append(数据[dl],轴=0)
dl=[]
i+=1
其他:
持续

问题是,这种方法的速度不够快,无法读取一个庞大的数据文件……

它们代表什么?这些列是独立的行,并且它们总是包含相同数量的元素吗?在这个文件中是否有回车符?@EdChum它们是蒙特卡罗马尔可夫链代码的输出,即
emcee
,等等列表具有相同的长度,四个元素数。代码在每次迭代中生成20*500个元素列表并附加到文件中。您的答案有两个错误:第一,它不返回数组。第二,
\u array
列表中的元素是
string
,最后返回一个大的纠缠列表我很抱歉,兄弟…现在就试试嘿@Dalek如果你认为能解决你的问题,请把我的答案标记为正确答案!!谢谢:)不,我不这么认为,因为它不能解决我的问题。那是不可能的。。当你运行它时会得到什么?
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