繁体   English   中英

仅从Python中的文件导入具有特定列数的行

[英]Only importing rows with a specific number of columns from file in Python

我试图在for循环中将多个文件导入到我的代码中进行分析,但是文件的格式并非完全相同(并且手动编辑的文件太多)。

我需要的数据在每个文件中都是相同的-我作为字符串导入的13列。 下面是一个文件示例:

could not open XWindow display
could not open XWindow display

No graphics display available for this session.
Graphics tasks that attempt to plot to an interactive screen will fail.

/data/poohbah/2/asassn/be/F0041-70_2645
###  JD        HJD            UT_date             IMAGE    FWHM  Diff Limit      mag    mag_err       counts   counts_err   flux(mJy)     flux_err
2456784.50841  2456784.50816  2014-05-07.0072681  interp_bf002339_coadd 2.61 -2.65 17.031      15.543  0.093          526.82        44.57   2.328        0.197       
2456789.45407  2456789.45347  2014-05-11.9529421  interp_be003585_coadd 2.26 -2.31 16.869      15.383  0.093          834.50        70.78   2.695        0.229       
2456790.47441  2456790.47419  2014-05-12.9732922  interp_bf004070_coadd 1.72 -2.25 17.246      15.721  0.090          645.67        52.82   1.974        0.162       
...
(data continues)
...
2457895.45745  2457895.45919  2017-05-21.9587133  interp_bf305499_coadd 1.71 -2.45 17.299      15.482  0.068          673.31        42.10   2.461        0.154       
/data/poohbah/1/assassin/bin/./ap_phot_im_cal_test.py:654: RuntimeWarning: invalid value encountered in sqrt
  counts_err_a = np.sqrt( counts_a / options.gain + (area_a * bg_stdev_a **2.0 ) )
/data/poohbah/1/assassin/bin/./ap_phot_im_cal_test.py:369: RuntimeWarning: invalid value encountered in less_equal
  no_detected = np.nonzero( (counts <= limit) & (area >= 0.01) )[0]
/data/poohbah/1/assassin/bin/./ap_phot_im_cal_test.py:367: RuntimeWarning: divide by zero encountered in log10
  maglimit[notbad] = -2.5 * np.log10(limit[notbad]) + def_zeropt

我只需要最后一行'###'和'/ data'路径之间的数据,并且在所有文件中,此部分的格式与13列完全相同。 但是,任何特定文件开头和结尾的“注释”都可能不同。 一些没有“无法打开XWindow显示”,另一些没有末尾的路径。 我试过忽略以'#'或'/'开头的行,但这对于第一行或'counts_err_a'以及在此特定示例结尾处的此类行均不起任何作用。

有没有一种方法可以将数据导入Python并采用其中具有特定列数的行? 在伪代码中,它可能类似于:

open(file_name)
 if column_number = 13
   np.genfromtxt(file_name)
 else skip

在对它们进行计数之前,您将不知道有多少列,因此您可以在读取文件时对其进行过滤,但仍然需要split()行。 如下所示,例如,如果有很多评论,您可以添加其他检查。

saved_lines = []
with open(filename) as f:
    for line in f:
        if len(line.split()) == 13:
            saved_lines.append(line)

或同等的comprehension

with open(filename) as f:
    saved lines = [line for line in f if len(line.split()) == 13]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM