オーダーメイドコース
icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,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] 未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

ファイルの読み込み

事前に以下の内容のファイルを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("line5n")
f.write("line6n")
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を使った人工知能(AI)や機械学習の基礎を習得できるオンラインブートキャンプPython講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。