我有一个看起来像这样的文件:
Chr-坐标覆盖
chr1 236968289 2
chr1 236968318 2
chr1 236968320 2
chr1 236968374 2
chr1 237005709 2
chr14 22086843 2
chr14 22086846 2
chr14 22086849 2
chr14 22086851 4
chr2 5078129 2
chr2 5341758 2
chr2 5342443 2
我想操纵它来获得:
chr-开始-结束-平均覆盖距离
chr1 236968289 236968374 2 85
chr14 22086843 22086851 2.5 8
chr2 5078129 5078129 2 0
chr2 5341758 5342443 2 685
我想要:如果 chr 与前一个 chr不同,或者坐标之间的差异大于 1000:它会打印输出,如图所示。与 chr、起始坐标、结束坐标、平均覆盖范围以及开始和结束之间的距离。
为此,我编写了以下代码:
cov=open("coverage.txt")
oldchr="chr55" #dummy starting data
oldcoordinate=1
sumcoverage=0
startcoordinate=0
try:
while True:
line=next(cov).split("\t",2)
newchr=line[0]
newcoordinate=int(line[1]) #read informations from file
newcoverage=int(line[2].strip())
if oldchr != newchr or newcoordinate - oldcoordinate > 1000:
distance=oldcoordinate-startcoordinate
averagecoverage=sumcoverage/distance
merge=oldchr+'\t'+str(startcoordinate)+'\t'+str(oldcoordinate)+'\t'+str(averagecoverage)+'\t'+str(distance)
print merge
startcoordinate=newcoordinate
sumcoverage=0
oldchr=newchr
oldcoordinate=newcoordinate #replace old with new chr and coordinates
sumcoverage=sumcoverage+newcoverage
except(StopIteration):
print ""
我无法理解为什么它不能正常工作。我得到的错误是获得“平均覆盖率”的除法试图除以 0,所以在许多情况下,“距离”( 距离 = oldcoordinate-startcoordinate)等于 0。这不应该发生在输入中文件绝不是两行具有相同坐标的情况。我无法看到错误在哪里。我希望有人可以帮助我,提前谢谢你。