トップページに戻る

文字列操作(2)strやファイル読み込み

目次

  • strクラスの便利な関数
    • str.strip
    • str.split
    • str.replace
  • テキストファイル読み込み

strクラスの便利な関数

strクラスには、str.format以外にも使い勝手の良い関数が多数用意されています。
ここでは、そのうちファイル入力を処理する際などに役立つ関数を紹介します。

str.strip

stripは「取り除く、奪う」などの意味を持つ単語ですが、その名の通りこの関数は文字列の最初や最後にある余計な空白や改行文字を取り除いてくれます。

In [1]:
#最初と最後の空白を取り除く
"       空白が        たくさん     あるよ   ".strip()
Out[1]:
'空白が        たくさん     あるよ'
In [2]:
# 改行文字も取り除く
"      最後に  改行文字が   含まれる例    \n".strip()
Out[2]:
'最後に  改行文字が   含まれる例'

str.split

この関数では、指定した区切り文字で文字列を分割して文字列のリストを返します。区切り文字を指定しない場合、スペースやタブのような空白でうまいこと分割してくれるので、まずは区切り文字を指定しないでやってみることをおすすめします。

In [3]:
#スペースで分割
"a b c".split()
Out[3]:
['a', 'b', 'c']
In [4]:
#タブやスペースが混在しててもうまく分割してくれる
"a \t   b  \t  c".split()
Out[4]:
['a', 'b', 'c']
In [5]:
#区切り文字を指定する場合
"csvファイルなどに,使う場合を,想定しています".split(",")
Out[5]:
['csvファイルなどに', '使う場合を', '想定しています']

str.replace

その名の通り、文字列に含まれるある文字を別の文字に置き換えた文字列を返す関数です。

In [6]:
"あいうあいう".replace("あ","い") # "あ"を"い"に置き換える
Out[6]:
'いいういいう'

テキストファイル読み込み

with構文をファイル入出力の際に使いましょう。
エラーが起きても、ファイルを自動的に閉じてくれるため、安全にファイル入出力を行うことができます。

In [7]:
# ファイルの最後までを文字列としてdataに入れる
with open("data.txt", "r", encoding="utf-8") as fp:
    data = fp.read()
In [8]:
# 下はwith構文で書いた場合と大体等価ですが、
# 1行増えた上にインデントがなく、読みにくい
fp = open("data.txt", "r", encoding="utf-8")
data = fp.read()
fp.close()

一行ずつ読み取りたい場合は、fpに対してforループを回すと良いです。
下の例では、各行が改行文字を含んだまま取り出されているのでstr.strip関数でそれを取り除いています。

In [9]:
with open("data.txt", "r", encoding="utf-8") as fp:
    for line in fp:
        print(line.strip())
"都道府県コード","都道府県名","元号","和暦(年)","西暦(年)","注","人口(総数)","人口(男)","人口(女)"
"00","全国","大正",9,1920,"",55963053,28044185,27918868
"01","北海道","大正",9,1920,"",2359183,1244322,1114861
"02","青森県","大正",9,1920,"",756454,381293,375161
"03","岩手県","大正",9,1920,"",845540,421069,424471
"04","宮城県","大正",9,1920,"",961768,485309,476459
"05","秋田県","大正",9,1920,"",898537,453682,444855
"06","山形県","大正",9,1920,"",968925,478328,490597

テキストファイルはそれぞれに異なる文字コードが使われています。
もともとの文字コードと違う文字コードで読み込もうとすると「文字化け」と言われる現象が起きます。
うまくテキストファイルをopenできない場合、以下のencodingを試してみると良いです。

  • utf-8
  • shift-jis
  • cp932
  • euc-jp

大概のテキストファイルはどれかに当てはまります。

誤字やおかしい点などがあったら @zawawahoge (Twitter) にお気軽にご連絡ください。

トップページに戻る