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()で文字列に変換しておく必要があります。
実際に書いてみよう
ファイルの読み込み
事前に以下の内容のファイルを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講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。