将文本文件转换为VCF表单时出错

2024-04-18 22:04:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python代码,我试图将一个包含行中变量信息的文本文件转换为一个variant调用格式文件(vcf),以便进行下游分析。在

我得到的一切都是正确的,但当我试图运行代码时,我错过了前两个条目,我是说前两行。代码在下面,未读取整个文件的行被突出显示。我想听听专家的建议。在

我刚开始用python编写代码,所以我并不完全精通它。在

##fileformat=VCFv4.0
##fileDate=20140901
##source=dbSNP
##dbSNP_BUILD_ID=137
##reference=hg19
#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO

import sys

text=open(sys.argv[1]).readlines()
print text
print "First print"
text=filter(lambda x:x.split('\t')[31].strip()=='KEEP',text[2:])
print text
print "################################################"
text=map(lambda x:x.split('\t')[0]+'\t'+x.split('\t')[1]+'\t.\t'+x.split('\t')[2]+'\t'+x.split('\t')[3]+'\t.\tPASS\t.\n',text)
print text
file=open(sys.argv[1].replace('.txt','.vcf'),'w')

file.write('##fileformat=VCFv4.0\n')
file.write('##source=dbSNP')
file.write('##dbSNP_BUILD_ID=137')
file.write('##reference=hg19\n')
file.write('#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n')

for i in text:
        file.write(i)
        file.close()

输入:

^{pr2}$

所需输出:

##fileformat=VCFv4.0
##source=dbSNP##dbSNP_BUILD_ID=137##reference=hg19
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO
chrM    152 .   T   C   .   PASS    .
chr9    311 .   T   C   .   PASS    .
chr13   440 .   C   T   .   PASS    .

获得的输出:

##fileformat=VCFv4.0
##source=dbSNP##dbSNP_BUILD_ID=137##reference=hg19
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO
chr13   440 .   C   T   .   PASS    .

我想有一些关于如何纠正这个错误的帮助。在


Tags: 代码textbuildidsourcepassfilewrite
1条回答
网友
1楼 · 发布于 2024-04-18 22:04:33

你的代码有几个问题

  1. filter函数中传递text[2:]。我想您应该传递text来获取所有行。在
  2. 在写入.vcf文件的最后一个循环中,将关闭循环内的文件。您应该首先写入所有值,然后在循环外关闭文件。在

所以你的代码看起来像(我去掉了所有的指纹):

import sys
text=open(sys.argv[1]).readlines()
text=filter(lambda x:x.split('\t')[31].strip()=='KEEP',text) # Pass text
text=map(lambda x:x.split('\t')[0]+'\t'+x.split('\t')[1]+'\t.\t'+x.split('\t')[2]+'\t'+x.split('\t')[3]+'\t.\tPASS\t.\n',text)
file=open(sys.argv[1].replace('.txt','.vcf'),'w')

file.write('##fileformat=VCFv4.0\n')
file.write('##source=dbSNP')
file.write('##dbSNP_BUILD_ID=137')
file.write('##reference=hg19\n')
file.write('#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n')

for i in text:
    file.write(i)
file.close() # close after writing all the values, in the end

相关问题 更多 >