我有一个包含数据的文本文件,我正在尝试用 Python 读取这些数据:
OMEGA2 1.450E+00 1.500E+00 1.550E+00 1.600E+00 1.650E+00 1.700E+00
OMEGA2 1.800E+00 1.850E+00 1.900E+00 1.950E+00 2.000E+00 2.050E+00
F2REAL 1.146E+00 -1.015E+03-2.206E+03-2.618E+03-2.288E+03-1.400E+03
F2REAL 6.255E+00 -3.254E+02-8.150E+02-1.060E+03-9.749E+02-5.995E+02
F2REAL 1.754E+01 -1.530E+02-4.375E+02-5.932E+02-5.618E+02-3.536E+02
F2REAL 1.740E+01 -7.981E+01-2.525E+02-3.748E+02-3.891E+02-2.739E+02
OMEGA2 1.800E+00 1.850E+00 1.900E+00 1.950E+00 2.000E+00 2.050E+00
现在,我只想获取以 F2REAL 开头的行的值; 每行我想提取 6 个值。 value1 是从索引 11 到索引 20,value 是从索引 21 到 30,...,值 6 是从索引 61:70
我尝试了以下方法:
file = 'file.txt'
STR1 = 'F2REAL'
def get_data():
with open(file) as f:
hyd_all = f.readlines()
for line in hyd_all:
if STR1 in line:
print([float(line[10:19]),float(line[20:29])])
get_data()
- 这不会读取 E-power,因为我得到 [1.146,-1.015,..]。如何正确获取?
- 除了写 10:19,20:29,..60:69 之外,还有更好的方法吗? 所有感兴趣的行都有 6 列,并且始终从 10*i 开始
- 我想将每个结果附加到一个矩阵中。在这个 4 行 6 列的示例中
最佳答案
电子符号就是一种符号。这些值已正确解析,只是表示方式不同
你可以使用列表理解
假设您正在谈论
numpy
矩阵(否则只需切换到pandas
DataFrame):
import numpy as np
def get_data(path: str, target: str, width: int = 10):
values = []
with open(path, 'r') as f:
for line in f.readlines():
# 'F2REAL' should be at the beginning of the line not just anywhere
if line.startswith(target):
# map sequential fixed widths to float
values.append([float(line[width*i:width*(i+1)]) for i in range(1, 7)])
return np.asarray(values)
print(get_data('file.txt', 'F2REAL'))
输出:
[[ 1.146e+00 -1.015e+03 -2.206e+03 -2.618e+03 -2.288e+03 -1.400e+03]
[ 6.255e+00 -3.254e+02 -8.150e+02 -1.060e+03 -9.749e+02 -5.995e+02]
[ 1.754e+01 -1.530e+02 -4.375e+02 -5.932e+02 -5.618e+02 -3.536e+02]
[ 1.740e+01 -7.981e+01 -2.525e+02 -3.748e+02 -3.891e+02 -2.739e+02]]
关于Python:如何从文本文件中分割位置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66183285/