我要做的是这样的脚本读取当前文件:
chr1,700244,714068,LOC100288069,982
chr1,1568158,1570027,MMP23A,784
chr1,1567559,1570030,MMP23A,784
chr1,1849028,1850740,TMEM52,799
chr1,2281852,2284100,LOC100129534,934
chr1,2281852,2284100,LOC100129534,800
chr1,2460183,2461684,HES5,819
chr1,2460183,2461684,HES5,850
chr1,2517898,2522908,FAM213B,834
chr1,2518188,2522908,FAM213B,834
chr1,2518188,2522908,FAM213B,834
chr1,2518188,2522908,FAM213B,834
chr1,2517898,2522908,FAM213B,834
如果第3列在同一行中重复,则将第4列的值求和,得出该和的平均值。输出应为:
^{pr2}$我试过这个剧本,但没用。谁能给我点小费吗?在
f1 = open('path', 'r')
reader1 = f1.read()
f3 = open('path/B_Media.txt','wb')
for line1 in f1:
coluna = line1.split(',')
chr = coluna[0]
start = coluna[1]
end = coluna[2]
gene = coluna[3]
valor_B = coluna[4]
previous_line = current_line
current_line = line
gene2 = previous_line[3]
soma_B2 = previous_line[4]
soma_de_B = int(valor_B)+int(soma_B2)
if gene == gene2:
x += 1
media_gene = soma_de_B/x
output = chr + "," + start + "," + end + "," + gene + "," +valor_B+","+media_gene
f3.write(output)
f3.flush()
print output
因为你需要知道接下来会发生什么(以逐行阅读的方式说话),我将把阅读和写作分成两个不同的部分。在
另外,^{} -模块可能会派上用场,因为您不必处理任何特殊情况(如文本中的逗号等),而且读/写非常容易。使用
with
打开文件通常是一个好的做法,因为关闭它是自动处理的。在现在来看看代码:-)
基本上,它首先读取输入文件中的所有内容并将其放入
data
。然后,with
输出文件,遍历每一行,执行以下操作:sum()/len()
计算平均值,并用新值替换相应的列,然后将其写入输出文件。在结果:
^{pr2}$(您可能认识到
from __future__ import division
语句,它确保在除法时可以有非整数值,比如834.5
)相关问题 更多 >
编程相关推荐