ファイル入出力

プログラム中からファイルを操作できます。

下記のファイルを利用し、ファイルの操作を学びましょう。 fruits.txt:

りんご
バナナ
オレンジ
もも
メロン

ファイルを利用する

ファイルを利用するにはファイルを利用できる状態にする必要がある。これをファイルを開くという。終わったら、閉じる。

open('ファイルパス')を利用して、ファイルを開き、プログラム中でファイルオブジェクトとして利用します。

file = open('fruits.txt', encoding='utf-8')
print(file.read())
file.close()
# りんご
# バナナ
# オレンジ
# もも
# メロン

最後にclose()を書かずに自動で閉じるためにwithを利用します。

with open('fruits.txt', encoding='utf-8') as file:
    print(file.read())

close()を書く必要がないので、withの利用をおすすめします。

ファイルの読込

ファイルの内容を読み込みます。

read()を利用するとファイルの全内容を読み込めます。

with open('fruits.txt', encoding='utf-8') as file:
    text = file.read()
    print(text)
# りんご
# バナナ
# オレンジ
# もも
# メロン

readline()を利用するとファイルの一行分を読み込みます。

with open('fruits.txt', encoding='utf-8') as file:
    print(file.readline())
    print(file.readline())
# りんご
#
# バナナ

readlines()はファイルの全行のリストを返します。

with open('fruits.txt', encoding='utf-8') as file:
    lines = file.readlines()
    print(lines)
# ['りんご\n', 'バナナ\n', 'オレンジ\n', 'もも\n', 'メロン']

ループの利用

ループを利用するとファイルを一行ずつ読み込めます。

with open('fruits.txt', encoding='utf-8') as file:
    for row in file:
        print(row)

改行の削除

ファイルの一行の末尾には改行が含まれています。改行を削除するのにrstrip()を利用します。

with open('fruits.txt', encoding='utf-8') as file:
    for row in file:
        print(row.rstrip())

行の分割

csvファイルのようにカンマ(,)で区切られたファイルを読み込んで区切りごとに分割します。分割した1つずつの要素をカラムと呼びます。

with open('fruits.txt', encoding='utf-8') as file:
    for row in file:
        columns = row.split(',')
        print(columns)

ファイルへの書き込み

ファイルへの書き込みを行うには、開くときにモードを指定します。

file = open('output.txt', 'w', encoding='utf-8')

'w'がモードですが、以下の種類があります。

  • r: 読み込み専用。省略可能(これまでのopen()はすべて読み込み専用です)
  • w: 書き込みするときに指定。ファイルが存在しない場合、新しいファイルが作られる。
  • x: ファイルが存在しない場合のみ、ファイルを作成し、書き込む。ファイルが存在する場合は何もしない。
  • a: 末尾に書き込み。ファイルが存在しない場合はファイルを作成し、書き込む。

write()

f.write(書き込む文字列)でファイルに文字列を書き込んでいます。 最後の\n改行を表す特殊な文字列です。

with open('data/output.txt', 'w', encoding='utf-8') as f:
    f.write('hello, world\n')

open(ファイルパス, 'a')と、open()‘a’をつけると、ファイルの末尾に追加で書き込みを行います(’w’の場合は書かれていた内容は上書きされて消えてしまいます)。

with open('data/work.log', 'a', encoding='utf-8') as f:
    f.write('{} - 出勤\n'.format(str_now))

公式ドキュメント

詳しくは 入力と出力 を参照ください。