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 の場合のみ改行コードを含んだままの文字列となる。