到目前为止,我已经能够通过查看旧线程来解决大多数问题,但这次我找不到任何与当前问题有关的内容,所以我将尝试提出自己的问题。 / p>
我是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','OBJECT','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', “比邻 - 半人马座”, '2016-02-15T09:13:39.222', '57433.38448174', '26 0.2' ], [ ''],
等。并且所有日期(MJD-OBS)都被加载到名为datesPRD的列表中。
所以我需要做的是只考虑最后一个值('SNR')高于给定值(例如10)的数据。因此,如果SNR值太低或者我之后可以删除数据,我应该在加载文件时跳过这些行。我想第一个选择会更好,但任何帮助将不胜感激。
答案 0 :(得分: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]
答案 1 :(得分:0)
您可以通过迭代所有行并跳过不具有10以上的最后一个值的行来完成此操作。
当然,我们必须跳过没有足够元素的行,并将我们的数字从字符串转换为十进制类型。
for line in datesPRD[1:]:
if len(line) > 5:
if decimal(line[4]) >= 10:
# Do something with the line here.
答案 2 :(得分:0)
你可以做到
int testarr[]={1,2,3};