0

这是文件的样子

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

4 回答 4

2

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

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

然后,您需要获取各个行。如果文件不是太大(如非常大),您可以将其全部存储在内存中。

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

然后用 . 获取从 a 行到 b 行的行lines_i_want = list_of_file[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 line in islice(f, a, b)))

from itertools import islice如果要执行此操作,请确保在程序顶部包含该行!

于 2013-07-30T17:20:50.737 回答
2
import numpy
data = numpy.loadtxt('filename.txt')
print(data[7:,1].sum())

我可能已经转置了索引,在这种情况下它将是 data[1,7:].sum()

于 2013-07-30T18:45:55.713 回答
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]
于 2013-07-30T17:52:09.650 回答
0
sum([int(s.strip().split()[1]) for s in open('exp.txt').readlines()])

根据字段分隔符更改拆分。 参考。

于 2016-01-03T17:35:19.537 回答