IDのリストファイルに従ってfastaから配列を除いたり取り出したりする

#追記：2018/06/29
seqkit grep でも同じようなことができます

https://github.com/shenwei356/seqkit


#fastaから配列を抽出、削除
IDのリストファイルの載っている配列を削ったり、その配列だけ取り出したりする。

```py:fasta_extract.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#fasta_id項目をkeyにして、hitした配列を標準出力へ

import sys
from Bio import SeqIO


fasta_in = sys.argv[1]                            #１番目の引数には、変更したいfastaファイルを指定する。
query = sys.argv[2]                          #２番目の引数に 1行毎に　keyIDを記述したファイルを指定


for record in SeqIO.parse(fasta_in, 'fasta'): #fastaファイルを開くSeqIOを使ってパースする(1項目づつ読み込む）
    id_part = record.id                       #fastaのID部分を読み込む
    m_part = id_part.rstrip()        #chompしてm_partにいれる
    description_part = record.description
    seq = record.seq                          #fastanの配列部分を読み込む
    for q in open(query, "r"):                     #アノテーション情報ファイルを開く
        if m_part == q.rstrip():            #fastaファイルのidとchanger項目のid部分が一致したら。。
            fasta_seq = '>' + description_part + '\n' + seq      #fasta形式に整えて
            print(fasta_seq)                  #標準出力にfastaを出力
```

```py:fasta_remove.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#fasta_id項目をkeyにして、hitしなかった配列を標準出力へ

import sys
from Bio import SeqIO


fasta_in = sys.argv[1]                            #１番目の引数には、変更したいfastaファイルを指定する。
query = sys.argv[2]                          #２番目の引数に 1行毎に　keyIDを記述したファイルを指定
hit = 0

for record in SeqIO.parse(fasta_in, 'fasta'): #fastaファイルを開くSeqIOを使ってパースする(1項目づつ読み込む）
    id_part = record.id                       #fastaのID部分を読み込む
    m_part = id_part.rstrip()        #chompしてm_partにいれる
    description_part = record.description
    seq = record.seq                          #fastanの配列部分を読み込む
    for q in open(query, "r"):                     #アノテーション情報ファイルを開く
        if m_part == q.rstrip():            #fastaファイルのidとchanger項目のid部分が一致したら。。
            hit += 1
    if hit == 0:
        fasta_seq = '>' + description_part + '\n' + seq      #fasta形式に整えて
        print(fasta_seq)                  #標準出力にfastaを出力
    hit = 0

```



```py:fasta_extract_cont.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#fasta_id項目をkeyにして、hitした配列を標準出力へ(一部一致に対応版）

import sys
from Bio import SeqIO


fasta_in = sys.argv[1]                            #１番目の引数には、変更したいfastaファイルを指定する。
query = sys.argv[2]                          #２番目の引数に 1行毎に　keyIDを記述したファイルを指定


for record in SeqIO.parse(fasta_in, 'fasta'): #fastaファイルを開くSeqIOを使ってパースする(1項目づつ読み込む）
    id_part = record.id                       #fastaのID部分を読み込む
    m_part = id_part.rstrip()        #chompしてm_partにいれる
    description_part = record.description
    seq = record.seq                          #fastanの配列部分を読み込む
    for q in open(query, "r"):                     #アノテーション情報ファイルを開く
        if q.rstrip() in m_part:            #包含するか検索
            fasta_seq = '>' + description_part + '\n' + seq      #fasta形式に整えて
            print(fasta_seq)                  #標準出力にfastaを出力
```


```py:fasta_remove_cont.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#fasta_id項目をkeyにして、hitした配列を標準出力へ(一部一致に対応版）

import sys
from Bio import SeqIO


fasta_in = sys.argv[1]                            #１番目の引数には、変更したいfastaファイルを指定する。
query = sys.argv[2]                          #２番目の引数に 1行毎に　keyIDを記述したファイルを指定
hit = 0


for record in SeqIO.parse(fasta_in, 'fasta'): #fastaファイルを開くSeqIOを使ってパースする(1項目づつ読み込む）
    id_part = record.id                       #fastaのID部分を読み込む
    m_part = id_part.rstrip()        #chompしてm_partにいれる
    description_part = record.description
    seq = record.seq                          #fastanの配列部分を読み込む
    for q in open(query, "r"):                     #アノテーション情報ファイルを開く
        if q.rstrip() in m_part:            #包含するか検索
            hit += 1
    if hit == 0:
        fasta_seq = '>' + description_part + '\n' + seq      #fasta形式に整えて
        print(fasta_seq)                  #標準出力にfastaを出力
    hit = 0

```

# discription部分の検索対象にした場合

```py:fasta_remove_V3.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from Bio import SeqIO


fasta_in = sys.argv[1]                            #１番目の引数には、変更したいfastaファイルを指定する。
query = sys.argv[2]                          #２番目の引数に 1行毎に検索キーワードを記述したファイルを指定
hit = 0

for record in SeqIO.parse(fasta_in, 'fasta'): #fastaファイルを開くSeqIOを使ってパースする(1項目づつ読み込む）
    id_part = record.description                       #fastaのdescription部分を読み込む
    m_part = id_part.rstrip()        #chompしてm_partにいれる
    description_part = record.description
    seq = record.seq                          #fastanの配列部分を読み込む
    for q in open(query, "r"):                     #アノテーション情報ファイルを開く
        if  q.rstrip() in m_part:            #fastaファイルのidとchanger項目のid部分が一致したら。。
            hit += 1
    if hit == 0:
        fasta_seq = '>' + description_part + '\n' + seq      #fasta形式に整えて
        print(fasta_seq)                  #標準出力にfastaを出力
    hit = 0

```