バイオインフォ道場、くまぞうです。
Pythonでスクリプトを書く場合の、文字列処理について簡単な演算を確認します。
Pythonの文字列処理
Pythonの文字列は文字を順番に並べたものです。リテラルや文字型の変数として使います。先頭の文字を0番目として、インデックスや範囲を指定して個々の文字にアクセスすることができます。変数に格納することができますが、長さに事実上の制限はありません。文字列には、連結・分割・検索や置換などのような便利な関数が準備されています。
文字列処理の便利な関数
Pythonには文字列処理のための便利な関数がたくさん用意されていますが、スクリプトを書くときによく使うものをまとめました。
文字列へのアクセス
Pythonでは文字列のインデックスを指定して、部分文字列を取り出します。インデックス0が先頭で末尾まで1ずつ増えます、特に末尾を指定する場合は-1を指定すると便利です。範囲は[開始:終了(含まず)]を指定します。
"hello world!"[0] 'h' "hello world!"[-1] '!'
"hello world!"[6:-1] # 最後の1個手前まで 'world' "hello world!"[6:] # 途中から最後まで 'world!'
文字列 連結
Pythonでは文字列の連結には+
を使います。新しい文字列をつくることができます。
"hello" + " " + "world!" 'hello world!'
a = "hello" b = "world" c = a + " " + b 'hello world'
文字列 分割
Pythonでは文字列を分割するには、split
を使います。空白文字や指定した文字・正規表現で文字列を分割することができます。
"hello world!".split() ['hello', 'world']
a = "hello, world!" a.split(',') ['hello', ' world']
import re re.split(r'[, ]', "hello, world!") # 正規表現で除去。 ['hello', '', 'world']# 邪魔な空白はfilterで除去。サンプル参照。
文字列 検索
Pythonでは文字列を検索するには、find
を使います。指定した文字が見つかったインデックスを返します。見つからなければ-1が返ります。
"hello world!".find('ll') 2 "hello world!".find('lll') -1
文字列 置換
Pythonでは文字列を置換するには、replace
を使います。変更対象の文字列は変更されないので、変更後の結果は別の変数に格納します
"hello world!".replace('world', 'WORLD') 'hello WORLD!'
a = 'hello world!' a.replace('world', 'WORLD') 'hello WORLD!' b = a.replace('world', 'WORLD') a 'hello world!' # 変化しない b 'hello WORLD!' # 結果を受けた変数
サンプル
Pythonの文字列処理を使った、スクリプト例です。fastaファイルを読みこんでヘッダー情報だけを連結しながら取得します。最後に>
を目印にして分割します。filter
で不要な空白文字を除去しました。
string_test.py
#! /usr/local/bin/python # -*- coding: utf-8 -*- file_name = "my.fasta" all_header = "" f = open(file_name, "r") for line in f: if line[0] == '>': all_header += line.strip() # ヘッダーを全て連結 f.close() print all_header print filter(lambda x: x!='', all_header.split('>')) # >で分割 print
my.fasta
>cds1 ATGGTGGGTGGCAAGAAGAAAACCAAGATATGTGACAAAGTGTCACATGA TTTGGCAATCGGTTCCTGGATTGGACTTAGACCCCTACGCATCCTCAAAT GAAATGTTGCCAACGCTTCTTGAGAGCTGCCCAAAACTTGAATCTCTCAT >cds2 ATGGTTCAATATAATTTCAAGAGGATCACAGTTGTTCCCAATGGGAAGGA GCACGTCGTGGTGAAGCTGACAGAGTTATACCAACGCTTAGACCGAAACA AACCGACAGGCGTTGA >cds3 ATGACTCGTTTGTTGCCTTACAAAGGTGGAGATTTTTTGGGACCGGATTT CCGAGGTATACCTCTACCTTATCTTTCTGAATTAACTGTGAGCTTCATAG GCAAAAATTAAGATTGGTGAATGCTCAAAACGTAAAAAGGATAAGCAAGT >cds4 ATGGATTCAGAGTCAGAGTCAAAGCTCATATCATTCATTTCTCAATTAGT ATCATGCATGATACAAACAATCTCTCTGGTCAGCTCAATGGATTTGAAGT ATCTATTTCGGTAACTTCTTCTCATGTATGCAATGTGATTATATTCTCCA >cds5 ATGTCGGTTCCTCCTAGATTCCGGTCCGTAAATTCCGATGAGCGAGAGTT GCTGCAGAGGAAACCACCGGGGATGAAACTGGAGAAGCCGATGATGGAGA GAGAGAGAGTGATAAATAA
実行と結果
$ ls my.fasta string_test.py $ python string_test.py >cds1>cds2>cds3>cds4>cds5 ['cds1', 'cds2', 'cds3', 'cds4', 'cds5']
[amazonjs asin=”4797353953″ locale=”JP” title=”みんなのPython 改訂版”]