8. 文字列
文字列型について
(Python 3 系からはunicodeデフォルトに変更されているので注意)
シーケンス型のうち str, unicode が文字列。文字列リテラル(str型)は
1
|
|
もしくは
1
|
|
のように表す。
unicode文字列はほぼ文字列と同じ。マルチバイト文字を扱う場合はこの型を使うと、文字数等をうまいこと計算してくれる。
1
|
|
もしくは
1
|
|
のように表す。
3重クオート
1 2 3 4 5 |
|
もしくは
1 2 3 4 5 |
|
中では改行文字がそのまま認識される。 改行文字をキャンセルする場合は\を文末に。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
基本的に、日本語を扱う場合はその流れをunicode型で統一するのがベスト。 ただし、一部のモジュール(MeCab等)はstr型以外で動作しない場合があるので、 そのときはstr型に変換してやる。
ちなみにstr型とunicode型で同じ文字列「あいうえお」を==で比較した場合。
1 2 |
|
となる。バグの原因になりやすいので注意。
エスケープシーケンス
文字列中では以下の文字は特別な意味を表す。
よく使うのは
記号 \
, '
, "
のエスケープ、
改行コード \n
(*nix) \r\n
(Windows)、
タブ文字 \t
あたり。
エスケープシーケンス | 意味 |
---|---|
\ | バックスラッシュ() |
' | 一重引用符(‘) |
" | 二重引用符(“) |
\a | ASCII 端末ベル |
\b | ASCII バックスペース |
\f | ASCII フォームフィード |
\n | ASCII 行送り |
\N{name} | Unicodeデータベースで名前nameを持つ文字 |
\r | ASCII 復帰 |
\t | タブ文字 |
\uxxxx | 16bit Unicode の 16進数値 xxxx を持つ文字 |
\Uxxxxxxxx | 32bit Unicode の 16進数値 xxxxxxxx を持つ文字 |
\v | ASCII 垂直タブ |
\ooo | 8進数値 ooo を持つ文字 |
\xhh | 16進数値 hh を持つ文字 |
よく使う文字列メソッド
下記のメソッドと、シーケンス型の演算子でだいたいのことはできる。
- str.encode(encoding)
- 文字列をencoding(例. “utf-8”)でエンコードする。
1 2 |
|
- str.decode(encoding)
- 文字列をencoding(例. “utf-8”)でデコードする。
1 2 3 |
|
- str(x)
- str型に変換する
1 2 |
|
- unicode(x)
- unicode型に変換する
1 2 3 4 |
|
UnicodeDecodeError: 'ascii' codec can't decode byte XXXX in position Y: ordinal not in range(128)
というエラーが帰ってきた場合、システムの標準文字コードがasciiになっている。
色々解決方法はあるが、一番手っ取り早い解決方法は、以下をプログラムの冒頭部分に記述する。
1 2 3 4 5 6 7 8 |
|
str.find(sub[, start[, end]])
- 文字列のスライス s[start,end] (start、endは省略可)にsubが含まれる場合はその最小値のインデックス、そうでない場合は-1を返す。
str.join(iterable)
- iterable中の文字列をstrで結合した文字列を返す。
1 2 3 |
|
- str.lstrip([chars])
- 文字列の先頭部分を除去したコピーを返す。引数 chars は除去される文字集合を指定する文字列。省略した場合は空白文字を除去。
1 2 |
|
- str.rstrip([chars])
- 文字列の末尾部分を除去したコピーを返す。引数 chars は除去される文字集合を指定する文字列。省略した場合は空白文字を除去。
1 2 |
|
str.strip([chars])
- 文字列の先頭および末尾部分を除去したコピーを返す。引数 chars は除去される文字集合を指定する文字列。省略した場合は空白文字を除去。
str.split([sep[, maxsplit]])
- sepを単語の境界として、文字列を単語に分解し、単語からなるリストを返す。maxsplitが与えられた場合、最大maxsplit回分割され、maxsplit + 1 の要素数のリストとなる。
1 2 |
|
- str.splitlines([keepends])
- 文字列を改行部分で分解し、各行からなるリストを返す。keepends が True の場合のみ改行コードを含んだままの文字列となる。