python跳过无用的数据并读取特定的行

时间:2013-07-31 16:46:50

标签: python python-3.x

我的文本文件有20页长,我需要打印特定数据

我的文本文件如下:

123mcx    version 1.5.0 ld=fri Apr 09 08:00:00 MST 2008                12/10/12 11:59:03
 ***************************************************************************************  
1-       c ==== CELLS ====                                                               
    2-       1 0   1                   $ outside                                             
    3-       2 102 -0.001 -1 23 51                                                           
    4-       c                                                                               
    5-       21 3   -4.15e-4 -21                          $ detector                         
    6-       22 5   -11.34   -22 21                 $ Pb                                     
    7-       23 6   -7.87    -23 22                 $ Fe tube                                
    8-       c                                                                               
    9-       50 7000 -1.7  -51 41                         
multiplier bins
 att  constant    material   reactions or material-rho*x pairs
     1.02400E+00      3        103
  time  bins

     -i            to  5.00000E+02 shakes
      5.00000E+02  to  1.06000E+03 shakes
      1.06000E+03  to  1.69000E+03 shakes
      1.69000E+03  to  2.40000E+03 shakes
      2.40000E+03  to  3.19000E+03 shakes
      3.19000E+03  to  4.08000E+03 shakes
      4.08000E+03  to  5.08000E+03 shakes
      5.08000E+03  to  6.19000E+03 shakes
      6.19000E+03  to  7.43000E+03 shakes
      7.43000E+03  to  8.84000E+03 shakes

multiplier bin:   1.02400E+00    3        103                                                                         
        time

    5.0000E+02   5.54627E-06 0.0004-------- [I only need this data start here]
    1.0600E+03   2.40573E-06 0.0018
    1.6900E+03   2.11609E-06 0.0026
    2.4000E+03   2.04138E-06 0.0033
    3.1900E+03   2.01640E-06 0.0038
    4.0800E+03   2.07022E-06 0.0043
    5.0800E+03   2.11266E-06 0.0047
    6.1900E+03   2.16806E-06 0.0050
    7.4300E+03   2.24147E-06 0.0053
    8.8400E+03   2.32872E-06 0.0056
    1.0400E+04   2.36765E-06 0.0060
    1.2200E+04   2.50930E-06 0.0061
    1.4100E+04   2.43235E-06 0.0065
    1.6400E+04   2.69267E-06 0.0066-----[end]
1analysis of the results in the tally fluctuation chart bin 
(tfc) for tally  14 with nps =1598425200    print table 160
normed average 7.174350E-05          unnormed history  = 8.85335E-01
 estimated error    = 0.0014          estimated variance of the variance  = 0.0000

我需要跳过所有数据并仅打印我需要的内容 像:

5.0000E+02   5.54627E-06 0.0004
1.0600E+03   2.40573E-06 0.0018
1.6900E+03   2.11609E-06 0.0026
2.4000E+03   2.04138E-06 0.0033
3.1900E+03   2.01640E-06 0.0038
4.0800E+03   2.07022E-06 0.0043
5.0800E+03   2.11266E-06 0.0047
6.1900E+03   2.16806E-06 0.0050
7.4300E+03   2.24147E-06 0.0053
8.8400E+03   2.32872E-06 0.0056
1.0400E+04   2.36765E-06 0.0060
1.2200E+04   2.50930E-06 0.0061
1.4100E+04   2.43235E-06 0.0065
1.6400E+04   2.69267E-06 0.0066

之后,我只需要添加第二个列号,如

(5.54627E-06 +  2.40573E-06 + 2.11609E-06 + ...+ 2.69267E-06) = 3.504897E-05

请帮助我知道如何跳过数据并仅打印我想要的

谢谢

3 个答案:

答案 0 :(得分:1)

在每一行上使用正则表达式:

5.0000E + 02 5.54627E-06 0.0004看起来像:

import re 
goodLineRegex = r'\d+\.\d+E[+-]\d+\s{3}\d+\.\d+E[+-]\d+\s\d+\.\d+'

for line in file:
     m = goodLineRegex.match(line)
     if m is not None:
         do_something(line)

答案 1 :(得分:0)

您可以使用regular expressions查找符合搜索条件的文字

答案 2 :(得分:0)

data = numpy.genfromtxt('filename', skip_header=?, skip_footer=?, usecols=[1])
print data.sum()

skip_header:int,可选     要在文件开头跳过的行数。

skip_footer:int,可选     要在文件末尾跳过的行数

usecols:sequence,optional     要读取哪些列,其中0为第一列。例如,     usecols = (1, 4, 5)将提取第2,第5和第6列。

你也可以将它与基于正则表达式的方法结合起来,因为genfromtxt将使用生成器来代替文件。