Python 文字列処理 連結・分割・検索・置換 スクリプトの書き方

バイオインフォ道場、くまぞうです。

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']
スポンサーリンク