Python 将数据从文本文件选择性加载到数组中

Python 将数据从文本文件选择性加载到数组中,python,python-2.7,numpy,data-structures,pandas,Python,Python 2.7,Numpy,Data Structures,Pandas,我发现自己无法正确地从数据记录文件中提取数据。我的数据源文件如下所示: 0.80 1.20 3.00 3.00 0.05 0.01 0.60 0.35 0.45 1 2.00E-02 2.020 0.700 0.173 0.053 0.482 0.099 0 1.00E+08 0.00E+00 4.00E-01 0.00E+00 0.00E+00 3 1.00E+03 0.00E+00 0.00E+00 1.00E+00 1.00E-04 0 0 0 0.00E+00 1 0.10E+

我发现自己无法正确地从数据记录文件中提取数据。我的数据源文件如下所示:

 0.80 1.20 3.00 3.00 0.05 0.01 0.60 0.35 0.45 1
 2.00E-02 2.020 0.700 0.173 0.053 0.482 0.099 0
 1.00E+08 0.00E+00 4.00E-01 0.00E+00 0.00E+00 3
 1.00E+03 0.00E+00 0.00E+00 1.00E+00 1.00E-04 0
 0 0 0.00E+00 1 0.10E+02 0.50 0.00
 1 700.0 0   0.0 0.00 1 1 0.10E-02 0.10E+04

   4.999526E+00  7.821430E+01  1.098711371E+08 
 Remeshing model

  K      P         rho         T          r    
 999  4.170E+23  6.164E+06  1.577E+08  2.584E-0
 998  4.014E+23  6.004E+06  1.599E+08  8.277E-0
 997  3.859E+23  5.843E+06  1.622E+08  1.152E-0
 996  3.705E+23  5.682E+06  1.646E+08  1.411E-0
 995  3.553E+23  5.520E+06  1.673E+08  1.638E-0
 994  3.401E+23  5.357E+06  1.701E+08  1.844E-0
 993  3.252E+23  5.193E+06  1.730E+08  2.036E-0
 992  3.104E+23  5.029E+06  1.762E+08  2.218E-0
 991  2.957E+23  4.864E+06  1.795E+08  2.393E-0
 990  2.813E+23  4.699E+06  1.831E+08  2.563E-0

 989  2.671E+23  4.534E+06  1.870E+08  2.729E-0
 988  2.530E+23  4.368E+06  1.911E+08  2.892E-0
 987  2.392E+23  4.202E+06  1.957E+08  3.052E-0
 986  2.257E+23  4.036E+06  2.006E+08  3.212E-0
 985  2.124E+23  3.870E+06  2.060E+08  3.371E-0
 984  1.993E+23  3.703E+06  2.118E+08  3.530E-0
 983  1.866E+23  3.537E+06  2.183E+08  3.690E-0
 982  1.741E+23  3.371E+06  2.254E+08  3.851E-0
 981  1.620E+23  3.205E+06  2.332E+08  4.013E-0
 980  1.502E+23  3.039E+06  2.417E+08  4.177E-0

 979  1.388E+23  2.874E+06  2.508E+08  4.344E-0
 978  1.277E+23  2.710E+06  2.604E+08  4.513E-0
 977  1.170E+23  2.547E+06  2.704E+08  4.686E-0
K = [999, 998, 997, ... , 2, 1]
P = [ ........................]
rho = [ ........................]
and so on...
(这只是其中的一小部分,但基本上应该足以说明我的问题。实际文件大约有160万行,因此处理速度必须是一个高优先级…)

我现在需要做的是导入

 K      P         rho         T          r    
将行转换为单独的数组。但这还不是全部。。。此表中从999到1的行每隔几百行或几千行以不同的值重新出现(除了“K”部分,它始终是999到1)

我想将每一列数据导入一个数组或类似的东西。(1d阵列的性能可能优于2d阵列)

因此,最后,我希望数组的外观大致如下:

 0.80 1.20 3.00 3.00 0.05 0.01 0.60 0.35 0.45 1
 2.00E-02 2.020 0.700 0.173 0.053 0.482 0.099 0
 1.00E+08 0.00E+00 4.00E-01 0.00E+00 0.00E+00 3
 1.00E+03 0.00E+00 0.00E+00 1.00E+00 1.00E-04 0
 0 0 0.00E+00 1 0.10E+02 0.50 0.00
 1 700.0 0   0.0 0.00 1 1 0.10E-02 0.10E+04

   4.999526E+00  7.821430E+01  1.098711371E+08 
 Remeshing model

  K      P         rho         T          r    
 999  4.170E+23  6.164E+06  1.577E+08  2.584E-0
 998  4.014E+23  6.004E+06  1.599E+08  8.277E-0
 997  3.859E+23  5.843E+06  1.622E+08  1.152E-0
 996  3.705E+23  5.682E+06  1.646E+08  1.411E-0
 995  3.553E+23  5.520E+06  1.673E+08  1.638E-0
 994  3.401E+23  5.357E+06  1.701E+08  1.844E-0
 993  3.252E+23  5.193E+06  1.730E+08  2.036E-0
 992  3.104E+23  5.029E+06  1.762E+08  2.218E-0
 991  2.957E+23  4.864E+06  1.795E+08  2.393E-0
 990  2.813E+23  4.699E+06  1.831E+08  2.563E-0

 989  2.671E+23  4.534E+06  1.870E+08  2.729E-0
 988  2.530E+23  4.368E+06  1.911E+08  2.892E-0
 987  2.392E+23  4.202E+06  1.957E+08  3.052E-0
 986  2.257E+23  4.036E+06  2.006E+08  3.212E-0
 985  2.124E+23  3.870E+06  2.060E+08  3.371E-0
 984  1.993E+23  3.703E+06  2.118E+08  3.530E-0
 983  1.866E+23  3.537E+06  2.183E+08  3.690E-0
 982  1.741E+23  3.371E+06  2.254E+08  3.851E-0
 981  1.620E+23  3.205E+06  2.332E+08  4.013E-0
 980  1.502E+23  3.039E+06  2.417E+08  4.177E-0

 979  1.388E+23  2.874E+06  2.508E+08  4.344E-0
 978  1.277E+23  2.710E+06  2.604E+08  4.513E-0
 977  1.170E+23  2.547E+06  2.704E+08  4.686E-0
K = [999, 998, 997, ... , 2, 1]
P = [ ........................]
rho = [ ........................]
and so on...
我在考虑用
.readline()
逐行扫描文件,检查每一行是否是带有
“K,p,rho和T”
的行,然后,如果找到,用
np.loadtext()导入下千行左右。但这只是一个想法,可能做起来很糟糕

另一个问题是每十行就有一行空行,我认为这是为了人类可读性而实现的。我不知道他们是否对我的方法有问题

编辑: 我想a已经找到了一个可能的解决办法。。。但这是一种“好”的方法吗

K=[]
P=[]
密度=[]
温度=[]
半径=[]
质量=[]
outTP=open('../Data/out_TP1-9','r')
line=outTP.readline()
i=0
j=0
while line:
如果行[:10]=“K P”:
i+=1
K.append([])
P.append([])
Density.append([])
临时附加([]))
Radius.append([])
Mass.append([])
n=0
当n<999时:
line=outTP.readline()
如果行=='\n':
line=outTP.readline()
data=np.array(line.split())
data=data.astype(np.float)
K[i-1]。追加(数据[0])
P[i-1]。追加(数据[1])
密度[i-1]。追加(数据[2])
临时[i-1]。追加(数据[3])
半径[i-1]。追加(数据[4])
质量[i-1]。追加(数据[7])
n+=1
j+=1
line=outTP.readline()
打印长度(K),类型(K),类型(K[0]),类型(K[0][0])
返回K、温度、质量、半径、密度
因此,我最终得到了每个参数的二维浮点列表,第一个维度是出现的次数,第二个维度是值本身

你会同意还是有人认为有更好的方法?(当然会有…)

检查:

file = 'c:\\file.txt'

k = []
p = []
rho = []
t = []
r = []

with open(file) as f:
    lines = f.read().splitlines()

i = 999
for line in lines:
    line = line.strip()
    if line.startswith(str(i)):
        lineSplitted = line.split('  ')
        k.append(lineSplitted[0])
        p.append(lineSplitted[1])
        rho.append(lineSplitted[2])
        t.append(lineSplitted[3])
        r.append(lineSplitted[4])
        i-=1

你的方法听起来是个好主意。你试过了吗?还没有,我还在想办法:)好主意。这几乎是我几分钟前想到的,这对我有点帮助,给了我一个好主意,让一些东西发挥作用。:)