python如何实现多个文件相同位置的数值相加

我有多个文件需要整合,输出所有位点的A值,B值的总和,我通过多步shell已经实现了,但是我想知道用python应该怎么实现。
我的想法是先得到所有位点的总集,然后依次遍历文件,如果文件中有该位点,就加上相应的AB值。但是文件数目多的话,遍历就很慢,想知道有没有更好的办法。

for i in `ls *.txt`;do cut -f1-2 $i > $i.out;done
cat *.out | grep -v '#' | sort -k 1,1 -k 2,2n | uniq > all.pos
for i in `ls *.txt`;do python A.py $i $i.A;done
for i in `ls *.txt`;do python B.py $i $i.B;done
paste *.A > all-A.txt
paste *.B > all-B.txt
awk '{for(i=1;i<=NF;i++)  sum+=$i; print sum; sum=0}' all-A.txt > A.count
awk '{for(i=1;i<=NF;i++)  sum+=$i; print sum; sum=0}' all-B.txt > B.count
paste A.count B.count | awk '{OFS="\t";print $1,$2,$1+$2,$2/($1+$2)}' > output
### demo1.txt
#Chr    Pos    A    B    A+B    B/(A+B)
Chr01    11    2    1    3    0.33
Chr01    83    0    2    2    1.00
Chr02    45    1    1    2    0.50
Chr02    84    2    0    2    0.00
### demo2.txt
#Chr    Pos    A    B    A+B    B/(A+B)
Chr01    11    0    1    1    1.00
Chr01    26    0    2    2    1.00
Chr02    45    1    1    2    0.50
Chr02    84    2    0    2    0.00
### demo3.txt
#Chr    Pos    A    B    A+B    B/(A+B)
Chr01    26    2    0    3    0.00
Chr01    83    0    2    2    1.00
Chr02    45    1    1    2    0.50
Chr02    84    2    0    2    0.00
### output.txt
#Chr    Pos    A    B    A+B    B/(A+B)
Chr01    11    2    2    4    0.5
Chr01    26    2    4    6    0.67
...
阅读 4.4k
2 个回答

使用multiprocessing模块的pool

不用钻牛角尖,先cat合并多个文件为一个文件,再用pandas模块,pd['A+B']=df['A']+df['B']

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题