ファイルを取り扱うとき、ファイルの名前と文字コードを同時に指定することが推奨される。ファイルを開くとき、open
をそのまま利用しても良いが、より安全な方法として with
文とともに用いる。with
文を用いることで、プログラムがファイルの読み込み中に異常終了しても、ファイルが自動的に正しく閉じられる。
ファイルの読み込み
次は、PDB ファイル(1ALK.pdb)を読み込み、3 文字のアミノ酸コードを抽出する例である。アミノ酸コードは SEQRES 行にかかれているため、if 文を利用して SEQRES 行を探して、データを取得する。
aa = ''
with open('1ALK.pdb', mode = 'r', encoding = 'utf-8') as fh:
for buff in fh:
if buff[0:6] == 'SEQRES':
buff = buff.rstrip()
aa += buff[19:]
aa = aa.replace(' ', '')
print(aa)
ファイルの書き出し
ファイルを作成する場合は、ファイルを書き込みモード w
あるいは追加書き込みモード a
で開く。書き込みモードで開くとき、ファイルが既に存在している場合はその内容が破棄される。追加書き込みモードでは、既存のファイルの下側に、内容を追加する。
名前が new.fa となるファイルを新規作成する場合は次のようにする。
with open('new.fa', mode = 'w', encoding = 'utf-8') as fh:
fh.write('>NEW SEQ A\n')
fh.write('ACGATTTTATGCTGATCGTAGCTGTAGTCTAGCTGTCTGTC\n')
名前が sample.txt となるファイルに新しいデータを書き込み上書き保存する場合は次のようにする。ただし、sample.txt が存在しない場合は、新規作成される。
with open('new.fa', mode = 'a', encoding = 'utf-8') as fh:
fh.write('>NEW SEQ B\n')
fh.write('GATCGTAGCTGTAGTCTAGCTGTCTGTGGCATTATTTTGTA\n')
GZIP ファイルの読み書き
gzip モジュールを使うことで、GZIP 形式の圧縮ファイルをそのまま Python で読み書きできる。操作方法は、標準ファイルの読み書きとほぼ同じように行える。
gzip ファイルの読み込み
gzip ファイルの読み込みは gzip モジュールを使う。GZIP 形式のファイルはバイナリーファイルであるので、ファイルの読み込むときに、バイナリー読み込みモード rb
を使う。ただし、ここで読み込んだテキストはバイナリーのままとなっているので、普通の文字列として使用するには、バイナリーから文字列に変換する処理が必要である。
import gzip
with gzip.open('sample.fa.gz', 'rb') as fh:
for buff in fh.readlines():
print(buff)
また、読み込みモードに rt
がある。このモードで GZIP 形式のファイルを読み込むと、読み込んだテキストは自動的に文字列に変換してくれる。テキストを読み込むのであれば、このモードを使うと便利である。
import gzip
with gzip.open('sample.fa.gz', 'rt') as fh:
for buff in fh.readlines():
print(buff)
gzip ファイルの書き出し
gzip モジュールを使うことで、直接 GZIP 形式のファイルに書き込むことができる。書き込みの際に、バイナリー書き込みモード wb
を使用する。この際、文字列をバイナリーデータに変換してから write
に渡す必要がある。
import gzip
with gzip.open('sample.fa.gz', 'wb') as fh:
fh.write(b'>Seq1\nGCTGATCGAGTCGATCGATGCAGCTAGGT\n')
fh.write(b'>Seq2\nTCGATTATATGCTAGTCGATGCTTTCGATGCGCT\n')
fh.write(b'>Seq3\nGCTGAATCGCTATTATATGCATGCATGTCTGCAGCTAGGCT\n')
また、書き込みモードに wt
がある。このモードを使用すると、文字列をそのまま write
関数に与えると、関数内で自動的にバイナリーデータに変換し、GZIP ファイルに書き込まれる。テキストの書き込みであれば、このモードを使うと便利である。
import gzip
with gzip.open('sample.fa.gz', 'wt') as fh:
fh.write('>Seq1\nGCTGATCGAGTCGATCGATGCAGCTAGGT\n')
fh.write('>Seq2\nTCGATTATATGCTAGTCGATGCTTTCGATGCGCT\n')
fh.write('>Seq3\nGCTGAATCGCTATTATATGCATGCATGTCTGCAGCTAGGCT\n')