2017-04-21 1 views
3

아래에있는 작은 예제와 같은 파일이 있습니다. 4 줄마다 하나의 ID와 관련이 있습니다. 각 ID의 두 x 째 행은 N으로 시작합니다. 행의 시작 부분에서 N을 제거하려고하고 나머지는 동일하게 유지합니다. 파이썬에서 그렇게하고 싶습니다. 그걸하는 법을 아십니까?파이썬에서 텍스트 (.fastq) 파일을 편집하는 방법

예 :

@SRR2163140.1 HISEQ:148:C670LANXX:3:1101:1302:1947 length=50 
NGCGACCTCAGATCAGACGTGGCGACC 
+SRR2163140.1 HISEQ:148:C670LANXX:3:1101:1302:1947 length=50 
#<<ABGGGGGGGGGGGGGGGGGGGGGG 
@SRR2163140.3 HISEQ:148:C670LANXX:3:1101:1381:1997 length=50 
NGCCGACATCGAAGGATCAA 
+SRR2163140.3 HISEQ:148:C670LANXX:3:1101:1381:1997 length=50 
#<<ABFGGGGGGGGGGGGGG 
@SRR2163140.4 HISEQ:148:C670LANXX:3:1101:1705:1940 length=50 
NACAAACCCTTGTGTCGAGGGC 
+SRR2163140.4 HISEQ:148:C670LANXX:3:1101:1705:1940 length=50 
#=ABBGGGGGGGGGGGGGGGGG 
@SRR2163140.7 HISEQ:148:C670LANXX:3:1101:1704:1965 length=50 
NGGGACATGACAGCCTGGACCATCG 
+SRR2163140.7 HISEQ:148:C670LANXX:3:1101:1704:1965 length=50 
#=ABBGGGGGGGGGGGGGGGGGGGG 

출력 : 난 당신이 (각 시퀀스에서 시작 N 제거)에게 정확히 무엇을 할 것입니다 경우

@SRR2163140.1 HISEQ:148:C670LANXX:3:1101:1302:1947 length=50 
GCGACCTCAGATCAGACGTGGCGACC 
+SRR2163140.1 HISEQ:148:C670LANXX:3:1101:1302:1947 length=50 
#<<ABGGGGGGGGGGGGGGGGGGGGGG 
@SRR2163140.3 HISEQ:148:C670LANXX:3:1101:1381:1997 length=50 
GCCGACATCGAAGGATCAA 
+SRR2163140.3 HISEQ:148:C670LANXX:3:1101:1381:1997 length=50 
#<<ABFGGGGGGGGGGGGGG 
@SRR2163140.4 HISEQ:148:C670LANXX:3:1101:1705:1940 length=50 
ACAAACCCTTGTGTCGAGGGC 
+SRR2163140.4 HISEQ:148:C670LANXX:3:1101:1705:1940 length=50 
#=ABBGGGGGGGGGGGGGGGGG 
@SRR2163140.7 HISEQ:148:C670LANXX:3:1101:1704:1965 length=50 
GGGACATGACAGCCTGGACCATCG 
+SRR2163140.7 HISEQ:148:C670LANXX:3:1101:1704:1965 length=50 
#=ABBGGGGGGGGGGGGGGGGGGGG 
+1

올바른 fastq 형식을 사용하려면 품질 줄의 첫 번째 문자도 제거해야합니다. 당신이 원하는 것은 기지와 자질 간의 일치를 보존하지 않습니다. – bli

답변

4

, 그 일관성이없는 상태에서 FASTQ file을 떠날 것이다 .

FASTQ 파일의 모든 네 번째 줄에는 두 줄 이전의 순서에 대한 품질 값이 저장됩니다. 따라서 시퀀스에서 첫 번째 문자를 제거하면 품질 값이있는 행에서 첫 번째 문자를 제거해야합니다. 정기적으로 생물학적 데이터로 작업 할 거라면 당신은

with open("example.fastq") as f: 
    for idx, line in enumerate(f.read().splitlines()): 
     if idx % 2: 
      print(line[1:]) 
     else: 
      print(line) 

같은 순수한 파이썬에서 매우 간단 뭔가를 할 수

하지만, 당신은 정말 BioPython 같은 생물 정보학 모듈을 사용하여 시작해야합니다. 파일을 일관성없는 모양으로 남겨 두거나 의미가없는 작업을하려고하면 경고 메시지가 표시됩니다.

매 세 번째 줄에

@SRR2163140.1 HISEQ:148:C670LANXX:3:1101:1302:1947 length=50 
GCGACCTCAGATCAGACGTGGCGACC 
+ 
<<ABGGGGGGGGGGGGGGGGGGGGGG 
@SRR2163140.3 HISEQ:148:C670LANXX:3:1101:1381:1997 length=50 
GCCGACATCGAAGGATCAA 
+ 
<<ABFGGGGGGGGGGGGGG 
@SRR2163140.4 HISEQ:148:C670LANXX:3:1101:1705:1940 length=50 
ACAAACCCTTGTGTCGAGGGC 
+ 
=ABBGGGGGGGGGGGGGGGGG 
@SRR2163140.7 HISEQ:148:C670LANXX:3:1101:1704:1965 length=50 
GGGACATGACAGCCTGGACCATCG 
+ 
=ABBGGGGGGGGGGGGGGGGGGGG 

합니다 ('+'문자를 출력

from Bio import SeqIO 
from Bio import Seq 

new_records = [] 
for record in SeqIO.parse("example.fastq", "fastq"): 
    sequence = str(record.seq) 
    letter_annotations = record.letter_annotations 

    # You first need to empty the existing letter annotations 
    record.letter_annotations = {} 

    new_sequence = sequence[1:] 
    record.seq = Seq.Seq(new_sequence) 


    new_letter_annotations = {'phred_quality': letter_annotations['phred_quality'][1:]} 
    record.letter_annotations = new_letter_annotations 

    new_records.append(record) 


with open('without_starting_N.fastq', 'w') as output_handle: 
    SeqIO.write(new_records, output_handle, "fastq") 

되는 임의로 두에서 동일한 시퀀스 식별자 및 설명 하였다이다 같은

용액을 보인다 줄이 빠름)

관련 문제