0

我有以下输入文件

O    2.05151  39.51234   0.00000
O   32.69451   1.48634   8.31300
O   10.53351  21.63634   7.95400
O   30.37451  20.74134   0.99700
Si   8.06451  19.19434  10.21700
Si  32.03251  42.98634  21.23900
O    9.69051  19.06934  16.27200
Si   2.18351  39.67034  11.36500
Si  31.78351   2.38334   1.42300

……

首先,我希望根据第 4 列对这些数据进行分类,例如 [0~1, 1~2, 2~3, ...., max-1 ~ max] 然后统计 'Si' 和 ' 的数量O' 在每个部分。之后,根据这些数字进行一些计算,然后打印出来。打印格式设置为

section1   number_of_Si_in_section1   number_of_O_in_section1   add_two_numbers
...

划分了三个空间后,我尝试使用嵌套的 for 循环,但失败了。

for i1 in range (total number of lines) 
    for j1 in range (each sections) 
            if (at_name[j1] = 'Si'):
            num_Si = num_Si + 1
            if (at_name[j1] = 'O'):
            num_O = num_O + 1

像这样的东西,但我卡在中间。我听说 numpy、csvanal 或其他函数可以轻松做到这一点,但我不知道它们。

4

1 回答 1

0

您应该在 Python 解释器中逐行测试这段代码的一小部分。您会看到一些小错误(例如您使用单等号而不是双等号来检查相等性)。

循环内部没有任何东西依赖于i1,所以看起来这个循环只会一次又一次地做同样的事情。此外,您应该使用字典(或者更好的是,collections.Counter):

import collections
import csv

f = open('myfile.csv','rb')
reader = csv.reader(f, delimiter='\t')

si_counter = collections.Counter()
o_counter = collections.Counter()

for line in reader:
    number = int(line[3])
    si_or_o = line[0]
    if si_or_o == 'Si':
        si_counter[number] += 1
    elif si_or_o == 'O':
        o_counter[number] += 1

该代码未经测试,您可以改进它。

于 2014-03-12T06:19:29.023 回答