如何从一个.txt文件的注释读取数值数据为numpy的

问题描述:

假设我有一些.txt文件作为实验测量输出​​:如何从一个.txt文件的注释读取数值数据为numpy的

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之前的样本中导入权力值,我该怎么做?

谢谢

+2

使用常规的Python文件读取和解析。 – hpaulj

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

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行,做行3字符串操作和4

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

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

before = float(before) 

换句话说,只要你导入了行就使用字符串操作。

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

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

输出:

62.7 
33.0