Pythonでファイルの「読み込み」と「書き込み」をする方法を現役エンジニアが解説【初心者向け】

初心者向けにPythonでファイルの「読み込み」と「書き込み」をする方法について現役エンジニアが解説しています。Pythonでファイルの読み書きをするにはopenメソッドでモードを指定しファイルオブジェクトを取得します。その後にreadやwriteメソッドで読み書きを行います。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Pythonでファイルの「読み込み」と「書き込み」をする方法について解説します。

Pythonについてそもそもよく分からないという方は、Pythonとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのPythonオンライン講座の内容をもとにしています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Pythonでファイルの「読み込み」と「書き込み」をする方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

読み込みをする基本的な関数

Pythonでファイルの読み書きをするには、open()でファイルオブジェクトを取得する必要があります。open()は、第一引数にファイルのパス、第二引数(もしくは mode)にファイルへのアクセス種別(モード)を指定します。

modeは何も指定しない場合、mode=”r”(読み込み専用)となっているため、読み込みだけの場合はファイルパスだけ指定すれば、ファイルオブジェクトを取得できます。

ファイルオブジェクトを取得したら、read(), readlines(), readline()で中身の読み込みが可能です。

read()

read()は、ファイルの中身を全て一括で読み込むメソッドになります。内容を文字列形式で取得できます。

readlines()

readlines()は、ファイルの中身を全て一括で読み込むメソッドになります。

read()との違いは、read()が文字列形式で内容を取得するのに対し、readlines()は1行ごとのリスト形式で内容を取得します。

readline()

readline()は、ファイルの中身を1行ずつ読み込むメソッドになります。1回目の実行で1行目、2回目の実行で2行目、というように先頭から順番に読み込むことが可能です。

書き込みをする基本的な関数

ファイルの書き込みをする場合には、mode=”w”や mode=”a”などの書き込みが可能なモードでファイルオブジェクトを取得します。

mode=”w”は新規作成、もしくは上書きモード、mode=”a”は追記モードになります。ファイルオブジェクトを取得したら、write(), writelines()でファイルの書き込みが可能です。

write()

write()は、文字列を書き込むメソッドになります。数値などを書き込みたい場合は、str()で一度文字列に変換する必要があります。

writelines()

writelines()は、文字列のリストをまとめて書き込むメソッドになります。write()と同じように、数値などを書き込みたい場合はstr()で文字列に変換しておく必要があります。

[PR] Pythonで挫折しない学習方法を動画で公開中

実際に書いてみよう

ファイルの読み込み

事前に以下の内容のファイルをsample.txtという名前で作成しておきます。

line1
line2
line3

 

read()

まずはread()による一括読み込みを試してみましょう。文字列として内容を取得できているのが分かりますね。

f = open("sample.txt")
contents = f.read()
print(type(contents))
# => <class 'str'>
print(contents)
# => line1
# line2
# line3
f.close()

 

readlines()

次はreadlines()を試してみましょう。文字列のリストとして内容を取得できているのが分かりますね。

f = open("sample.txt")
contents = f.readlines()
print(type(contents))
# => <class 'list'>
print(len(contents))
# => 3
print(contents[0])
# => line1
print(contents[1])
# => line2
print(contents[2])
# => line3
f.close()

 

readline()

最後に readline()を試してみましょう。1行単位で文字列を取得できているのが分かりますね。

f = open("sample.txt")
contents = f.readline()
print(type(contents))
# => <class 'str'>
print(contents)
# => line1
contents = f.readline()
print(contents)
# => line2
contents = f.readline()
print(contents)
# => line3
f.close()

 

ファイルの書き込み

write()

まずは write()による書き込みを試してみましょう。前の内容を残したいので、追記モード(mode=”a”)でファイルオブジェクトを取得します。

# 追記モードでファイルオブジェクトを取得
f = open("sample.txt", "a")
f.write("line4")
f.write("line5\n")
f.write("line6\n")
f.close

write()で書き込み後、いちどファイルオブジェクトをclose()で閉じ、読み込みモードで内容を取得してみましょう。

# 読み込みモードでファイルオブジェクトを取得
f = open("sample.txt")
contents = f.read()
print(contents)
# => line1
# line2
# line3
# line4line5
# line6
f.close()

出力結果を見ると分かるように、write()では改行が含まれないため、改行したい場合には\nを自分で付ける必要があります。ご注意ください。

writelines()

次は writelines()を試してみましょう。

もともとの内容に戻したいので、今回は新規作成 or 上書きモード(mode=”w”)で開きます。文字列のリストとして内容を取得できているのが分かりますね。

# 新規作成 or 上書きモードでファイルオブジェクトを取得
f = open("sample.txt", "w")
contents = ["line1", "line2", "line3"]
f.writelines(contents)
f.close()

 

writelines()で書き込み後、いちどファイルオブジェクトをclose()で閉じ、読み込みモードで内容を取得してみましょう。

# 読み込みモードでファイルオブジェクトを取得
f = open("sample.txt")
contents = f.read()
print(contents)
# => line1
# line2
# line3
f.close()

編集前にはline4以降が書かれていましたが、上書きモードで書き込みしたためline3までになっていますね。

監修してくれたメンター

メンター稲員さん

フリーランスエンジニア。大手SEからフリーランスのWeb系エンジニアにジョブチェンジ。

経験言語:Ruby、Rails、Python、C/C++、Java、Perl、HTML/CSS3、JavaScript、CoffeeScript,Node.js。
おうち大好きマンです。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

オンラインのプログラミングスクールTechAcademyではPythonを使って機械学習の基礎を学ぶPythonオンライン講座を開催しています。

初心者向けの書籍を使って人工知能(AI)や機械学習について学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。