我有以下输入文件
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或其他功能可以轻松完成,但我不知道它们。
答案 0 :(得分: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
代码未经测试,您可以改进它。