2017-04-21 6 views
3

私は以下の小さな例のようなファイルを持っています。 4行ごとに1つのIDに関連付けられています。各IDの2行目はNで始まります。最初の行でNを削除したい場合は、それ以外はすべて同じままです。 私はそれをPythonで行いたいと思います。あなたはそれをする方法を知っていますか?Pythonでテキスト(.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 

が出力:

@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

私はあなたが(それぞれの配列から始まるNを除く)聞いて正確に何だろうならば、それは矛盾した状態でFASTQ fileを残すだろう。

FASTQファイルの各4行目は、2行先のシーケンスの品質値を保持します。したがって、シーケンスから最初の文字を削除する場合、品質値を持つ行から最初の文字を削除する必要があります。

あなたは

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

のような純粋なPythonで非常に簡単な何かを行うことができますが、あなたが定期的に生物学的なデータを操作するつもりなら、あなたは本当にBioPythonのようなバイオインフォマティクスモジュールを使用して開始する必要があります。ファイルを矛盾した形にしたり、意味をなさないものを実行しようとすると、警告が表示されます。

溶液を次にようになります。

毎に3行目の

@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 

(「+」文字が2から同じシーケンス識別子および説明が続く随意ある出力

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") 

関連する問題