2016-11-15 39 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]