ぶらりずむ

すきなものだけをあつめました

【Python】ファイルの入出力

文字の入力

文字入力を受け付けるにはinput関数を使う。

>>> food = input('好きな食べ物は?:')
好きな食べ物は?:肉 ← 肉と入力
>>> print(food)
肉
>>>

ファイルを読み込む

open関数を使う

>>> aaa_file = open('aaa.txt','w')

wは書き込みモード、rの場合は読み込みモード

ファイルに書き込む

writeメソッドとflushメソッドを使う

通常はwriteメソッドで書き込みを行うが、リストの書き込みはwritelinesメソッドを使う。

>>> aaa_file.write('Hello World')
11
※文字数を返してくる

flushメソッドでバッファされているかもしれない処理を書き出す。
writeだけではバッファの中身がディスクに書き込みしているかは保証されない。

>>> aaa_file.flush()
>>>
※特に何も返してこない

ファイルとの接続を閉じる

>>> aaa_file.close()
>>>
特に何も返してこない

closeの処理にflushが含まれるので、open→write→closeで開いたファイルに処理内容が書き込まれる。

>>> aaa_file.close()
>>>
>>> aaa_file.write('Hello World2')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file.
>>>

エラーが出て、aaa_fileが開かれていないことが分かる。

ファイルの内容の読み込み

>>> aaa = open('test.txt','r')
open関数の読み取りモードで開く

>>> read_aaa = aaa.readline()
>>> read_aaa
'Hello World\n'
>>>

readlineメソッドで読み込む、引数はなく一行ずつ読み込まれる。
2回実行すると、2行目が読み込まれる。

ファイルの内容の複数行をまとめて読み込む

test.txtは以下の内容があるとすると、readlinesメソッドを利用しても読み込む

Hello World1¥n
Hello Worl2^n
¥n

>>> aaa = open('test.txt','r')
open関数の読み取りモードで開く

>>> read_aaa = aaa.readlines()
>>> read_aaa
['Hello World1\n', 'Hello World2\n', '\n']
>>>

withを使うとopen/closeが楽になる

with open関数 as 変数:
     処理内容

close処理を書かなくても良い。

>>> with open('aaa.txt','r') as aaa:    #aaa.txtにはabcと書いてある
...     bbb = aaa.readline()
...     print(bbb)
...
abc