Python在文本文件中查找表中列的总和

时间:2013-07-30 17:10:03

标签: python python-3.x

这是文件的样子

5.0000E+02   5.23744E-06  0.0006
1.0600E+03   2.15119E-06  0.0023
1.6900E+03   1.83529E-06  0.0035
2.4000E+03   1.76455E-06  0.0044
3.1900E+03   1.78831E-06  0.0050
4.0800E+03   1.86632E-06  0.0056
5.0800E+03   1.91086E-06  0.0061
6.1900E+03   1.97899E-06  0.0066   <--- Get data from here...
7.4300E+03   2.03105E-06  0.0070
8.8400E+03   2.08666E-06  0.0074
1.0400E+04   2.12723E-06  0.0078
1.2200E+04   2.20352E-06  0.0081
1.4100E+04   2.02335E-06  0.0089
1.6400E+04   1.98286E-06  0.0094
1.8900E+04   1.58478E-06  0.0107
2.1700E+04   1.09529E-06  0.0133
2.4900E+04   6.59218E-07  0.0173
2.8500E+04   3.19703E-07  0.0250
3.2500E+04   1.55052E-07  0.0358
3.7000E+04   6.94320E-08  0.0542
4.2100E+04   3.44175E-08  0.0764
4.7800E+04   2.37904E-08  0.0944
5.4200E+04   1.29016E-08  0.1283
6.1400E+04   5.45355E-09  0.1770
6.9500E+04   4.18030E-09  0.2486
7.8700E+04   2.47747E-09  0.2629
8.8900E+04   2.69887E-09  0.2820
1.0100E+05   2.15937E-09  0.4286
1.1300E+05   4.39994E-10  0.7824
1.2800E+05   0.00000E+00  0.0000
1.4400E+05   0.00000E+00  0.0000
1.6300E+05   0.00000E+00  0.0000
1.8300E+05   0.00000E+00  0.0000
2.0700E+05   0.00000E+00  0.0000
2.3300E+05   0.00000E+00  0.0000
2.6300E+05   0.00000E+00  0.0000
2.9600E+05   0.00000E+00  0.0000   <--- ...to here 
3.3300E+05   0.00000E+00  0.0000
3.7600E+05   0.00000E+00  0.0000
4.2300E+05   0.00000E+00  0.0000
4.7600E+05   0.00000E+00  0.0000
5.3600E+05   0.00000E+00  0.0000
6.0400E+05   0.00000E+00  0.0000
6.8000E+05   0.00000E+00  0.0000
7.6500E+05   0.00000E+00  0.0000
8.6100E+05   0.00000E+00  0.0000
9.6900E+05   0.00000E+00  0.0000
1.0900E+06   0.00000E+00  0.0000
1.2200E+06   0.00000E+00  0.0000
1.3800E+06   0.00000E+00  0.0000
1.5500E+06   0.00000E+00  0.0000
1.7500E+06   0.00000E+00  0.0000
1.9700E+06   0.00000E+00  0.0000
2.2100E+06   0.00000E+00  0.0000
2.5000E+06   0.00000E+00  0.0000
2.8000E+06   0.00000E+00  0.0000
3.1500E+06   0.00000E+00  0.0000
3.5400E+06   0.00000E+00  0.0000
3.9900E+06   0.00000E+00  0.0000
4.4900E+06   0.00000E+00  0.0000
5.0500E+06   0.00000E+00  0.0000
5.6800E+06   0.00000E+00  0.0000
6.3900E+06   0.00000E+00  0.0000
1.0000E+07   0.00000E+00  0.0000

所以Python脚本会获得这些数据:

6.1900E+03   1.97899E-06  0.0066  
7.4300E+03   2.03105E-06  0.0070
8.8400E+03   2.08666E-06  0.0074
1.0400E+04   2.12723E-06  0.0078
1.2200E+04   2.20352E-06  0.0081
1.4100E+04   2.02335E-06  0.0089
1.6400E+04   1.98286E-06  0.0094
1.8900E+04   1.58478E-06  0.0107
2.1700E+04   1.09529E-06  0.0133
2.4900E+04   6.59218E-07  0.0173
2.8500E+04   3.19703E-07  0.0250
3.2500E+04   1.55052E-07  0.0358
3.7000E+04   6.94320E-08  0.0542
4.2100E+04   3.44175E-08  0.0764
4.7800E+04   2.37904E-08  0.0944
5.4200E+04   1.29016E-08  0.1283
6.1400E+04   5.45355E-09  0.1770
6.9500E+04   4.18030E-09  0.2486
7.8700E+04   2.47747E-09  0.2629
8.8900E+04   2.69887E-09  0.2820
1.0100E+05   2.15937E-09  0.4286
1.1300E+05   4.39994E-10  0.7824
1.2800E+05   0.00000E+00  0.0000
1.4400E+05   0.00000E+00  0.0000
1.6300E+05   0.00000E+00  0.0000
1.8300E+05   0.00000E+00  0.0000
2.0700E+05   0.00000E+00  0.0000
2.3300E+05   0.00000E+00  0.0000
2.6300E+05   0.00000E+00  0.0000
2.9600E+05   0.00000E+00  0.0000

然后我需要中心栏的总和。

像这样: (1.97899E-06 + 2.03105E-06 + 2.08666E-06 + ... + 0.00000E + 00)= 1.90994E-05

只有第二列对此问题很重要。

第一列代表时间。 第二列代表一些数据编号。 第三列代表一些随机数。

请帮我找出:((

4 个答案:

答案 0 :(得分:2)

首先你需要打开文件。最好的方法是:

with open("myfile.txt","r") as f:
    # do stuff with file f here

然后你需要得到单独的行。如果文件不是太大(如非常大),您可以将其全部存储在内存中。

通过调用list(f)将行作为列表获取,例如。 list_of_file = list(f)

然后使用lines_i_want = list_of_file[a:b]从第a行到第b行获取行。

然后使用centre_column = [float(line.split()[1]) for line in lines_i_want]获取中心列(作为花车)。

现在使用total = sum(centre_column)添加它们。

或者,为了简洁而牺牲难以阅读:

with open("myfile.txt") as f:
    print(sum(float(i.split()[1]) for i in list(f)[a:b]))

如果文件很大并且无法存储在内存中,那么你应该使用itertools模块中的islice而不是仅仅切片列表:

with open(“myfile.txt”)     print(sum(float(line.split()[1])for islice(f,a,b)))

如果你想这样做,请确保在程序顶部加入from itertools import islice行!

答案 1 :(得分:2)

import numpy
data = numpy.loadtxt('filename.txt')
print(data[7:,1].sum())

我可能会转换索引,在这种情况下,它将是数据[1,7:]。sum()

答案 2 :(得分:0)

首先打开文件并创建一个列表。

with open('filename.txt','rU') as f:
    table = f.readlines()

假设您始终标记所需的行,您可以通过

找到边界
bounds = [table.index(row) for row in table if len(row.split()) is not 3]

这会查看表格的每一行,并找到您要开始和停止的位置。要获得您想要总结的行:

target_rows = table[bounds[0]:bounds[1]+1]

在bounds [1]上有一个+1,因为你想要包含最后一个条目,并且python中列表拼接的工作方式不包括最后一个条目。要提取第二列:

target_col = [float(row.split()[1]) for row in target_rows]

最后得到总和:

total = sum(target_col)

此外,target_rows指定要输出的行。您可以输出它以提供所需的输出表:

output = ['    '.join(row.split()[:3]) for row in target_rows]

答案 3 :(得分:0)

sum([int(s.strip().split()[1]) for s in open('exp.txt').readlines()])

根据字段分隔符更改拆分。 Reference.