2016-11-15 37 views
2

到目前为止,我已经能够通过查看旧线程来解决大多数问题,但是这次我找不到与我目前的问题有关的任何问题,所以我要尝试并问我自己的问题。根据python中的条件选择数据

我是Python新手,试图根据数据中的条件加载一些数据。我的脚本是这样的:

infoPRD = [] 
with open('SpectraPRDinfo.txt') as inputfile: 
for line in inputfile: 
    infoPRD.append(line.strip().split(' ')) 

datesPRD = [] 

for j in range(2,len(infoPRD),2): 
    datesPRD.append(float(infoPRD[j][3])) 

所以这个我取回我的文本文件中的信息,并在其中一列写值的列表。其结果是

[[ 'fitsName', '对象', 'DATE-OBS', 'MJD-OBS', 'SNR'], [ ''],

['ADP。 2016-03-18T01_03_02.067.fits', '比邻-矢车菊苷', '2016-03-17T09:05:48.326', '57464.37903156', '3.9'], [ ''],

['ADP.2016-09-09T09_40_26.314.fits', 'Proxima-Centauri', '2016-02-15T09:13:39.222', '57433。 38448174' , '26 0.2 '], [''],

等,以及所有的日期(在MJD-OBS)被装入一个称为datesPRD列表。

所以我需要做的是只考虑最后一个值('SNR')高于给定值(例如10)的数据。因此,如果信噪比值太低,或者我可以在之后删除数据,则应该在文件中加载时跳过这些行。我想第一个选项是可取的,但任何帮助将不胜感激。

回答

1

如果你的数据被布置成一个字符分隔的行和列,您应该使用csv模块来处理它。

import csv 
with open(filename, newline='') as f: 
    r = csv.DictReader(f, delimiter=' ') 
    datesPRD = [float(row['SNR']) for row in r if float(row['SRD']) > 10] 
+0

这将选择SNR行,但很容易改变日期,这是你的意思。更重要的是,按照相同的步骤,很容易从文件中提取任何其他列。它的作用像一个魅力,是非常有用的。谢谢 :) – AspicioAstra

0

,您可以通过所有的行迭代并跳过那些不具备的最后一个值超过10

当然,我们必须跳过那些不具备足够的元素,并转换我们的多条线路做到这一点从字符串到十进制类型。

for line in datesPRD[1:]: 
    if len(line) > 5: 
     if decimal(line[4]) >= 10: 
      # Do something with the line here. 
0

你可以做

with open('SpectraPRDinfo.txt', 'r') as inputfile: 
    infoPRD = [x.split(' ') for x in inputfile.readlines() 
       if x and int(x.split(' ')[-1]) > 10]