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

……

まず、これらのデータを [0~1, 1~2, 2~3, ...., max-1 ~ max] のように 4 番目の列に基づいて分類し、'Si' と '各セクションの O'。その後、それらの数値に基づいて計算を行い、印刷します。印刷フォーマットが

section1   number_of_Si_in_section1   number_of_O_in_section1   add_two_numbers
...

3 つのスペースを分けて、ネストされた 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 インタープリターで、このコードの小さな部分を 1 行ずつテストする必要があります。小さな間違いが見られます (同等性をチェックするために二重等号の代わりに単一等号を使用したなど)。

ループ内では に依存するものは何もない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 に答える