|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
有两个输入文件,一个是数值点文件probe.txt,共76行,格式如下:
chr1 13828906 13828907 rs7520386 0 +
chr1 88923260 88923261 rs7532151 0 +
chr1 107441475 107441476 rs776284 0 +
另一个文件input.bam,有很多行,每一行有一个start、end,现在就是想统计在input.bam里面分别有多少行能覆盖到probed.txt中的每一个点,最后的输出格式是:
chr1 13828906 13828907 rs7520386 0 + 12
chr1 88923260 88923261 rs7532151 0 + 8
chr1 107441475 107441476 rs776284 0 + 3
然后我的代码是:
- import pysam
- import pandas as pd
- start =time.clock()
- f1 = pysam.AlignmentFile("input.bam", 'rb')
- f3 = open("probe.txt",'r')
- df = pd.read_table("probe.txt",header=None)
- snp=[0] * 76
- flags = [99,83]
- def judge_range(line):
- chr = line.reference_name
- flag = line.flag
- start = int(line.pos + 1)
- end = int(start) + int(line.isize)
- f3 = open('probe.txt','r')
- col = 0
- for i, region in enumerate(f3):
- S = region.split("\t")[1]
- CHR = region.split("\t")[0]
- if chr == CHR and S in range(start,end):
- col = i
- else:
- continue
- return(col)
-
- for line in f1:
- flag = line.flag
- if flag in flags:
- col = judge_range(line)
- snp[col] = snp[col] + 1
- else:
- continue
- data = pd.DataFrame(snp)
- data.rename(columns={0:'align_number'},inplace=True)
- df1 = pd.concat([df,data],axis=1,ignore_index=True)
- df1.to_csv('result.txt',header=False)
复制代码
请问一下这个代码该怎么修改才能提高运行效率,probe.txt文件只有76行,input.bam里面有上千万行,我现在写的这个一直在跑,就是跑不出结果。。。。。。。。。 |
|