2014-09-02 5 views
0

파이썬 코드를 사용하여 행의 변형 정보가 들어있는 텍스트 파일을 다운 스트림 분석을위한 변형 호출 형식 파일 (vcf)로 변환하려고합니다.텍스트 파일을 VCF 형식으로 변환 할 때 오류 발생

나는 정확한 것을 얻고 있지만 코드를 실행하려고 할 때 처음 두 항목을 놓치고 싶습니다. 처음 두 행을 의미합니다. 코드가 아래에 있습니다. 전체 파일을 읽지 않는 행이 강조 표시됩니다. 전문가의 조언을 듣고 싶습니다.

저는 파이썬으로 코딩하기 시작 했으므로 완전히 익숙하지 않았습니다.

##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() 

INPUT :

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 

OUTPUT 원하는 : OUTPUT 수득

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

text[2:]을 전달하는 filter 기능에서 코드

  1. 와 문제의 몇 가지가 있습니다. 모든 행을 얻으려면 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 
+0

감사합니다. 이제는 잘 작동합니다. –

+0

이제는 작동하는 것이 좋습니다. 그것이 당신을 도왔다 고 생각한다면 대답을 수락하십시오! – sk11