\r
\s
は有効な文字クラスではありません。代わりに使用するつもりだったと思います。どちらも使用しない場合は、グループを減らすことができます。
しかし、何よりも、グループを正しく抽出する必要があります。
match = re.search(r'>(\w+)\s+(\w+)', line)
if match:
tag, gene = match.groups()
myDict[tag] = gene
2つのキャプチャグループのみを作成することで、これら2つをより簡単に抽出し、2つの変数と.groups()
に直接割り当てることができます。tag
gene
ただし、FASTA形式を読むと、これは1行にタグがあり、その後は複数行に遺伝子データがある複数行の形式であることがわかります。その場合、あなた\r
は改行と一致するように意図されていました。一度に1行ずつファイルを読み取るため、これは機能しません。
次のような正規表現を使用せずに、その形式を読み取る方がはるかに簡単です。
myDict = {}
with open('d.fasta', 'rU') as fileData:
tag = None
for line in fileData:
line = line.strip()
if not line:
continue
if line[0] == '>':
tag = line[1:]
myDict[tag] = ''
else:
assert tag is not None, 'Invalid format, found gene without tag'
myDict[tag] += line
print myDict
これにより、ファイルが1行ずつ読み取られ、開始>
文字に基づいてタグが検出されます。次に、遺伝子情報の複数の行が読み取られ、最近読み取られたタグの下で辞書に収集されます。
rU
モードに注意してください。Pythonのユニバーサル改行モードを使用してファイルを開き、ファイルの作成に使用された改行規則を処理します。
少なくとも最後のではなく; BioPyプロジェクトを見てください; それらのBio.SeqIO
モジュールは、FASTAに加えて他の多くのフォーマットを完全に処理します。