如何将.txt文件的注释中的数值数据读入numpy

时间:2017-10-11 14:08:42

标签: python numpy text import scipy

假设我有一些.txt文件作为实验测量的输出:

Date: 160818
double polished Si 300 microns
Power before sample: 62.7uW
Power after sample: 33.0uW
position    y1  y2  power
1.00E-01    1.93E+07    1.17E+06    2.32E-05
2.00E-01    1.92E+07    1.16E+06    2.32E-05
3.00E-01    1.93E+07    1.16E+06    2.32E-05
4.00E-01    1.94E+07    1.16E+06    2.30E-05
5.00E-01    1.94E+07    1.16E+06    2.32E-05
6.00E-01    1.93E+07    1.16E+06    2.32E-05
7.00E-01    1.94E+07    1.16E+06    2.32E-05
8.00E-01    1.94E+07    1.16E+06    2.32E-05
9.00E-01    1.93E+07    1.16E+06    2.32E-05
1.00E+00    1.93E+07    1.16E+06    2.32E-05

我知道如何忽略顶部的评论,只使用np.loadtxt(... ,skiprows=5)导入数据。但是,假设我想在样本之前输入功率值,即62.7和33.0,我该怎么做?

感谢

3 个答案:

答案 0 :(得分:3)

您可以像平常一样阅读文件。 只需跳过前两行并对第3行和第4行进行字符串操作

类似

before = rows[0] //first row
before = before[21:-2] 

如果我正确计算会给你数字。如果你想要它们作为数字而不是字符串,你可以

before = float(before)

换句话说,只需在导入行后使用字符串操作。

答案 1 :(得分:1)

一种选择是使用正则表达式(REGEX):

import re

将每行文字保存到列表中:

with open ("power.txt", "r") as myfile:
    data=myfile.readlines()

遍历列表以找到匹配的"数字字符串":

match = list()
for i in range(len(data)):

    match1 = re.search('[0-9]+[.][0-9]+', data[i]) # REGEX

    # Matching numbers are appended
    if match1:
        match.append(match1[0])

然后,您可以轻松地遍历新列表以打印出数字:

for i in range(len(match)):
    print(match[i])

您可以看到此方法也允许您获取表格中的数字。

答案 2 :(得分:1)

这只是为了让斯蒂尔先生的回答更加明确。

import typing
type Ticker str # How to do this? I used golang notation. How do you do it in python?
Report = typing.Dict[Ticker, typing.List] 

输出:

with open('physicist.txt') as f:
    f.readline()
    f.readline()
    print(float(f.readline()[21:-3].strip()))
    print(float(f.readline()[20:-3].strip()))