Python3入門 テキストファイル読み書きの基礎

ここでは、Python3 でテキストファイルを操作するための基本的な方法について解説します。


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

まずは、ファイルの読込みについて解説します。 ここでは例として、次のような2行のデータを含む data.txt を読込む例を示します。

This is sample text.
Can you see me?

ファイル内の全データを読込む

open() 関数でファイルを開き、開いた file object の read() メソッドを呼び出すことで、テキストファイル内の全データを取得することができます。

# 読込むファイルのパスを宣言する
file_name = "./data.txt"

try:
    file = open(file_name)
    data = file.read()
    print(data)
except Exception as e:
    print(e)
finally:
    file.close()
This is sample text.
Can you see me?


ファイル内のデータを1行ずつ読込む

ファイル内のデータを1行ずつ読み込みたい場合は、readlines() メソッドを呼び出します。 readlines() メソッドの戻り値は行の配列ですので、for 文を利用して1行ずつ処理を行います。 注意したいのは、行データの中には行末尾の改行コードが含まれる点です。 次の例では print() 関数の第二引数で end に空文字を指定し、改行が二重で出力されないように工夫しています。

# 読込むファイルのパスを宣言する
file_name = "./data.txt"

try:
    file = open(file_name)
    lines = file.readlines()
    for line in lines:
        print(line, end="")
except Exception as e:
    print(e)
finally:
    file.close()
This is sample text.
Can you see me?


テキストファイルの書込み

つぎに、ファイルにテキストデータを書き込む方法について解説します。

ファイルを新規作成もしくは上書きして書き込む

open() 関数で作成するファイルを開きます。 ファイルを開く際に、モードとして「書込み」を表す 'w' を指定して開きます。 (詳しくは本稿末を参考) 開いたファイルオブジェクトの write() メソッドに書き込むデータを指定することで、ファイルに書き込むことができます。

# 書き込むファイルのパスを宣言する
file_name = "./data2.txt"

try:
    file = open(file_name, 'w')
    file.write("This is new data")
except Exception as e:
    print(e)
finally:
    file.close()

ファイルに追記して書き込む

ファイル内の既存データはそのままに、ファイルの末尾にデータを追記したい場合は、ファイルを開く open() 関数の第二引数で 'a' を指定してファイルを開きます。 その後、開いたファイルオブジェクトの write() メソッドに書き込むデータを渡してあげることでファイルに追記することができます。

# 書き込むファイルのパスを宣言する
file_name = "./data2.txt"

try:
    file = open(file_name, 'a')
    file.write("This is new line")
except Exception as e:
    print(e)
finally:
    file.close()

追加解説 : ファイルを開く際のモードについて

ここまでの解説において、ファイルを読込む場合も書き込む場合も、まずは open() 関数でファイルを開いて file object を受け取ってから、そのファイルオブジェクトに対して操作をしました。 ファイルにはモードという考え方があり、ファイルを開く場合には「どのようなモードでファイルを開くか」を指定する必要があります。 ファイルのモードとは「読込むために開くのか」「書き込むために開くのか」ということです。 open() 関数の第二引数でモードを指定するのですが、モードを省略した場合には読込専用でファイルを開くことになっています。 上の読込みの場合の例でもモードを省略して open() 関数を呼び出しています。 逆に書込みの例ではモードを指定しています。 モードを指定する場合は、open() 関数の第二引数で、次のような値を指定します。

文字 意味
'r' 読込専用
'w' 書込み用, ファイルを上書きする
'a' 書込み用, ファイル末尾に追記する

著者 : OSCA

OSCA

 初級WEBエンジニアです。最近は Android, iOS, WEBアプリの作成に力を入れています。 個人として何か一つでも世の中の多くの人に使ってもらえるアプリを作ろうと日々奮闘中です。