「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Pythonをゆっくりていねいに学ぶ(その21/X)

 Pythonを真面目にゆっくり学ぶべく

を参考に学んでいきます*1

8. データの行き先

8.1 ファイル入出力

8.1.1 フラットファイル

 最も単純なタイプの永続記憶はフラットファイルで、ファイル名の下に格納された唯のバイト列である。ファイルからメモリに読み出し、メモリからファイルに書き込む。
 ファイルは読み書きする前に開く必要がある。

# 例:ファイルを開く
fileobj = open(filename, mode)
\mathrm{fileobj} \mathrm{open}()が返すファイルオブジェクト
\mathrm{filename} ファイルに付けられた名前で文字列
\mathrm{mode} ファイルのタイプやファイルの操作方法を知らせる文字列で2文字から成る。1文字目は

 ・\mathrm{r}:読み出し

 ・\mathrm{w}:書き込み*2

 ・\mathrm{x}:ファイルがまだ存在しないときに書き込む

 ・\mathrm{a}:ファイルが存在する場合、追記

 2文字目はファイルのタイプで、

 ・\mathrm{t}:テキスト

 ・\mathrm{b}:バイナリ

 ファイルを開いたら、データを読み書きする関数を呼び出し、最後にファイルを閉じる。

####################################
### ファイルを書き込む簡単な方法 ###
####################################

poem = '''There was a young lady named Bright,
Whose speed was far faster than light;
She started one day
In a relative way,
And returned on the previous night.'''


# relativityというファイルにpoemを書き込む
fout = open('relativity', 'wt')  # relativityを開く
fout.write(poem)                 # poemをファイルオブジェクトfoutに書き込む
fout.close()                     # foutを閉じる


# write()関数以外にprint()でテキストファイルに書き込むことができる
fout = open('relativity', 'wt')
print(poem, file = fout)
fout.close()

# ファイルが重要であれば、xモードとtryを用いることが考えられる
try:
    fout = open('relativity', 'xt')
    fout.write('stomp stomp stomp')
except FileExistsError:
    print('relativity already exists! That was a close one.')
8.1.2 read(),readline(),readlines()

 引数無しで\mathrm{read}()を呼び出すことでファイル全体を一度に読み込むことができる。ただし大きなファイルでこれを行なうときにはそのサイズ分のメモリをそのまま消費することになる。

# relativityファイルにpoemが書き込まれているとする

# 一度にすべての書き込み内容を読み込む
fin = open('relativity', 'rt')
poem = fin.read()
fin.close()

# 一度に読み込む字数に上限を設けるには引数にその文字数を与える
poem = ''
fin = open('relativity', 'rt')
chunk = 100

while True:
    fragment = fin.read(chunk)
    if not fragment:
        break
    poem += fragment
fin.close()


poem = ''
fin = open('relativity', 'rt')
chunk = 100

# 1行ずつ読み込む場合
while True:
    line = fin.readline()
    if not line:
        break
    poem += line
fin.close()


# イテレータを用いる方法
poem = ''
fin = oepn('relativity', 'rt')

for line in fin:
    poem += line
fin.close()
8.1.3 バイナリモード

 \mathrm{write}()呼び出しのモード文字列に'\mathrm{b}'を用いると、ファイルはバイナリモードで開かれる。
 \mathrm{read}()の場合はモードとして'\mathrm{rb}'を指定して開けばよい。

8.1.4 withによる自動的なクローズ

 ファイルが自動的にクローズするようにするには、\mathrm{with}を用いればよい。

with open('relativity', 'wt') as fout:
    fout.write(poem)

*1:第2版が出ているものの初版しか持っていないのでこちらで。

*2:ファイルが存在すれば上書きする。

プライバシーポリシー お問い合わせ