Получение ошибок при преобразовании текстового файла в формат VCF

У меня есть код Python, где я пытаюсь преобразовать текстовый файл, содержащий информацию о вариантах в строках, в файл формата вызовов (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()

ВХОД:

chrM    152 T   C   T_S7998 N_S8980 0   DBSNP   COVERED 1   1   1   282 36  0   163.60287   0.214008    0.02    11.666081   202 55  7221    1953    0   0   TT  14.748595   49  0   1786    0   KEEP
chr9    311 T   C   T_S7998 N_S8980 0   NOVEL   COVERED 0.993882    0.999919    0.993962    299 0   0   207.697923  1   0.02    1.854431    0   56  0   1810    1   116 CC  -44.649001  0   12  0   390 KEEP
chr13   440 C   T   T_S7998 N_S8980 0   NOVEL   COVERED 1   1   1   503 7   0   4.130339    0.006696    0.02    4.124606    445 3   16048   135 0   0   CC  12.942762   40  0   1684    0   KEEP

ВЫХОД желаемый:

##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    .

Я хотел бы получить некоторую помощь относительно того, как эта ошибка может быть исправлена.

1 ответ

Решение

Есть несколько проблем с вашим кодом

  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
Другие вопросы по тегам