我发现自己无法正确地从数据记录文件中提取数据。我的数据源文件如下所示:
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
(这只是它的一小部分,但基本上应该足以显示我的问题。实际文件大约有160万行,因此处理速度必须是高优先级......)
我现在需要的是导入
下的列 K P rho T r
行到单独的数组中。但这不是全部......从999到1的这一行表重新出现每几百或几千行具有不同的值(除了“K”部分,总是999比1)。
我想将每列数据导入数组或等效的数组。 (也许1d阵列的性能要比2d阵列好。)
所以最后,我想最终看起来或多或少像这样的数组:
K = [999, 998, 997, ... , 2, 1]
P = [ ........................]
rho = [ ........................]
and so on...
我正在考虑逐行扫描文件.readline()
并检查每一行是否为"K, P, rho and T"
,然后,如果找到,则导入下一千行左右np.loadtext()
1}}。但这只是一个想法,可能非常糟糕。
另一个问题是每10行的那些空行,我认为是为了人类的可读性而实现的。我不知道这对我的方法是否有问题。
编辑: 我认为已经找到了一个可能的解决方案......但这是一个“好”的方法吗?
K = []
P = []
Density = []
Temp = []
Radius = []
Mass = []
outTP = open('../Data/out_TP1-9', 'r')
line = outTP.readline()
i = 0
j = 0
while line:
if line[:10] == " K P":
i += 1
K.append([])
P.append([])
Density.append([])
Temp.append([])
Radius.append([])
Mass.append([])
n = 0
while n < 999:
line = outTP.readline()
if line == '\n':
line = outTP.readline()
data = np.array(line.split())
data = data.astype(np.float)
K[i-1].append(data[0])
P[i-1].append(data[1])
Density[i-1].append(data[2])
Temp[i-1].append(data[3])
Radius[i-1].append(data[4])
Mass[i-1].append(data[7])
n += 1
j += 1
line = outTP.readline()
print len(K), type(K), type(K[0]), type(K[0][0])
return K, Temp, Mass, Radius, Density
所以我最终得到每个参数的2d浮点列表,第一个维度是出现次数,第二个维度是值本身。
你会同意还是有人认为肯定有更好的方法? (肯定会有......)
答案 0 :(得分:0)
检查:
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