mei_13のPython講座 ロゴ

【解説】Pythonの「ファイル操作」をマスターしよう:データの読み取りから安全な保存まで




Pythonの「ファイル操作」をマスターしよう:データの読み取りから安全な保存まで


Yukiのアイコン
【Yuki】 Hirokiくん、こんにちは。今日はPythonの「ファイル入出力」について一緒にお勉強しましょうか。 プログラミングをしていると、プログラムを終了した後もデータを残しておきたい、あるいはすでにあるテキストデータを取り込んで処理したい、という場面が必ず出てきます。 普段、わたしたちが何気なく扱っているテキストファイルやログファイルも、Pythonを使えば自由自在に操作できるんですよ。


Hirokiのアイコン
【Hiroki】 Yukiさん、よろしくお願いします! そうですね、せっかく計算した結果も、プログラムを閉じたら消えてしまうのはもったいないなと思っていました。 ファイルに保存できれば、他のプログラムで使ったり、後で見返したりできますよね。でも、ファイルを「開く」とか「閉じる」とか、少し難しそうなイメージがあります……。


Yukiのアイコン
【Yuki】 ふふ、大丈夫ですよ。基本さえ押さえれば、それほど複雑なことではありません。 Pythonにはファイルを扱うためのとても便利な仕組みが備わっているんです。 まずは、一番基本的な「ファイルを開いて、閉じる」という流れから見ていきましょう。

1. ファイル操作の基本:open() と close()


Yukiのアイコン
【Yuki】 ファイル操作の基本は、「開く(open)」「読み書きする」「閉じる(close)」という3つのステップで成り立っています。 現実の世界でノートに何かを書くときと同じですね。まず表紙をめくって、中身を読み書きして、終わったらパタンと閉じる……。 Pythonでは、open() という関数を使ってファイルを開きます。

# ファイルを書き込みモードで開く
f = open("test.txt", "w")

# 何か処理をする
f.write("Hello, Python!")

# ファイルを閉じる
f.close()


Hirokiのアイコン
【Hiroki】 open() の中にある "test.txt" はファイル名ですよね。その隣にある "w" というのは何ですか?


Yukiのアイコン
【Yuki】 それは「モード」と呼ばれるものです。 "w"Write(書き込み) の頭文字で、「新しくファイルを作って書き込みますよ」という意味になります。 もし "test.txt" というファイルがすでにあった場合は、中身が全部消えて上書きされてしまうので注意が必要です。 読み込みたいときは "r"(Read)、追記したいときは "a"(Append)を使います。


Hirokiのアイコン
【Hiroki】 なるほど、用途に合わせてモードを指定するんですね。 最後に f.close() を忘れてはいけない理由は何でしょうか?


Yukiのアイコン
【Yuki】 いい質問ですね。ファイルを開いたままにしておくと、コンピュータのメモリなどの資源を無駄に使い続けてしまったり、他のプログラムがそのファイルを使えなくなってしまったりすることがあるんです。 最悪の場合、データが正しく保存されないこともあります……。 でも、人間だもの、どうしても「閉じる」のを忘れてしまうことってありますよね。 わたしも、夜遅くまで作業に没頭していると、ついつい出しっぱなしにしてしまうことがあって……。


Hirokiのアイコン
【Hiroki】 あはは、Yukiさんでも忘れ物をするんですね。ちょっと安心しました。


Yukiのアイコン
【Yuki】 ……うう、恥ずかしいです。でも、そんな「うっかり」を防いでくれる、もっとスマートな書き方があるんですよ。

2. より安全な「with構文」の使い方


Yukiのアイコン
【Yuki】 Pythonには with 構文 という非常に便利な仕組みがあります。 これを使うと、ブロックを抜けたときに自動的にファイルを閉じてくれるんです。 現在のPythonプログラムでは、こちらの書き方が一般的ですね。

with open("sample.txt", "w", encoding="utf-8") as f:
    f.write("with構文を使うと、close()を自動でやってくれます。")
    f.write("\nとっても便利ですね。")

# ここではもうファイルは閉じられています


Hirokiのアイコン
【Hiroki】 あ、これなら close() を書き忘れる心配がないですね! as f というのは、開いたファイルに f という名前(変数名)をつけているということですか?


Yukiのアイコン
【Yuki】 その通りです。with ブロックの中では、f という名前を使って読み書きを行います。 ブロックが終われば、たとえ途中でエラーが起きたとしても、Pythonが責任を持ってファイルを閉じてくれるんですよ。 控えめなわたしとしては、こうやってシステムが裏方で支えてくれる仕組みは、なんだかとても頼もしく感じます。


Hirokiのアイコン
【Hiroki】 「エラーが起きても閉じてくれる」というのは心強いですね。 これからは with 構文を積極的に使っていこうと思います。

3. データの「読み込み」:目的に合わせた3つのメソッド


Yukiのアイコン
【Yuki】 次は、ファイルの中身を読み込む方法について詳しく見ていきましょう。 Pythonには、読み込みのためのメソッドが主に3つあります。 それぞれの特徴を理解して、状況に合わせて使い分けるのがコツですよ。

  1. read(): ファイルの全内容を1つの文字列として読み込む
  2. readline(): 1行ずつ読み込む
  3. readlines(): 全行を読み込んで、1行ずつのリストにする


Hirokiのアイコン
【Hiroki】 使い分けが難しそうですが、どういう時にどれを使えばいいんでしょう?


Yukiのアイコン
【Yuki】 そうですね……。例えば、ファイルがそんなに大きくなくて、中身を丸ごと一度に処理したいときは read() が楽かもしれません。 でも、ファイルがとても巨大な場合、一度に全部読み込もうとするとメモリがいっぱいになって、コンピュータが「熱暴走」のような状態になってしまうかもしれません。 わたしも夏場の暑い時期は苦手なのですが、コンピュータにとってもメモリの使いすぎは負担なんです。


Hirokiのアイコン
【Hiroki】 それは大変だ……。じゃあ、大きなファイルを扱うときはどうすればいいんですか?


Yukiのアイコン
【Yuki】 そういう時は、「for文」を使って1行ずつ処理するのが一番効率的だと思います。

with open("data.txt", "r", encoding="utf-8") as f:
    for line in f:
        # 1行ずつ取り出して処理する
        print(line.strip()) # strip()は末尾の改行を取り除くため


Hirokiのアイコン
【Hiroki】 あ、open("data.txt", "r") をそのまま for文に回せるんですね! これなら少しずつ処理できるから、大きなファイルでも安心ですね。


Yukiのアイコン
【Yuki】 はい。1行ずつ丁寧に読み取っていく様子は、まるで静かな夜に一文字ずつ小説を読み進めるようで、わたしはとても好きなんです……。

4. データの「書き込み」:新規作成と追記の違い


Hirokiのアイコン
【Hiroki】 読み込みの次は、書き込みについてもっと詳しく知りたいです。 さっき write() を使っていましたが、改行などはどうすればいいんですか?


Yukiのアイコン
【Yuki】 write() メソッドは、渡された文字列をそのまま書き込むだけなので、改行したいときは自分で \n (改行コード)を入れる必要があります。 また、先ほど少しお話しした「モード」の使い分けが重要になってきます。

  • "w"(新規書き込み): ファイルが存在しない場合は作り、ある場合は上書きします。
  • "a"(追記): ファイルの末尾に新しくデータを追加します。


Hirokiのアイコン
【Hiroki】 既存のデータを消さずに、ログみたいにどんどん足していきたいときは "a" を使えばいいんですね。


Yukiのアイコン
【Yuki】 その通りです。例えば、今日の気温や湿度を記録していくプログラムなら、こんな感じでしょうか。

log_data = "2023-10-27: 快適な気温です。勉強がはかどりますね。"

with open("log.txt", "a", encoding="utf-8") as f:
    f.write(log_data + "\n")


Hirokiのアイコン
【Hiroki】 なるほど! これで日記アプリみたいなものも作れそうです。

5. 文字化けを防ぐ:エンコーディングの大切さ


Yukiのアイコン
【Yuki】 ここで、ひとつだけ大切な注意点があります。 さっきから open() の中で encoding="utf-8" と書いていますよね。 これを指定しないと、日本語を扱うときに「文字化け」という悲しい現象が起きてしまうことがあるんです……。


Hirokiのアイコン
【Hiroki】 あ、よくインターネットで見る、読めない漢字が並んでしまうあれですね。


Yukiのアイコン
【Yuki】 そうです。特にWindowsだと、標準の文字コードが utf-8 ではない場合が多いので、明示的に指定してあげたほうが安全です。 わたしは、Webデザインをするときもフォントや文字の美しさにはこだわってしまうのですが、プログラムでも「文字を正しく表示させる」というのは、とても大切な礼儀だと思うんです。 現代のプログラミングでは、世界標準である utf-8 を指定しておけば、まず間違いはないはずですよ。


Hirokiのアイコン
【Hiroki】 encoding="utf-8"。これはおまじないのように覚えておいたほうが良さそうですね。

6. ファイルの存在確認とパスの扱い


Hirokiのアイコン
【Hiroki】 Yukiさん、もし読み込もうとしたファイルが存在しなかったらどうなるんですか?


Yukiのアイコン
【Yuki】 その場合は FileNotFoundError というエラーが出て、プログラムが止まってしまいます。 それを防ぐために、事前にファイルがあるかどうかを確認する方法もあります。 標準ライブラリの os モジュールや pathlib モジュールを使うと便利ですよ。

import os

file_path = "sample.txt"

if os.path.exists(file_path):
    with open(file_path, "r", encoding="utf-8") as f:
        print(f.read())
else:
    print(f"ごめんなさい、{file_path} が見つかりませんでした……。")


Hirokiのアイコン
【Hiroki】 なるほど、こうやって確認してから開けば安全ですね。


Yukiのアイコン
【Yuki】 はい。最近のPythonでは、pathlib というライブラリを使うのがよりモダンで、直感的にパスを操作できるのでおすすめです。 パスというのは、ファイルがコンピュータのどこのフォルダ(ディレクトリ)にあるかを示す「住所」のようなものですね。 自分自身のプログラムと同じ場所にあるファイルならファイル名だけでいいですが、別の場所にある場合は正しい住所を教えてあげる必要があります。

7. まとめ:データという「思い出」を形にするために


Yukiのアイコン
【Yuki】 さて、今日はPythonのファイル入出力について一通り見てきましたが、いかがでしたか?


Hirokiのアイコン
【Hiroki】 最初は難しそうに感じましたが、with open(...) as f: の形さえ覚えてしまえば、意外とシンプルなんだなと思いました。 読み込みの read() や書き込みの write()、そして "r", "w", "a" のモード。これらを組み合わせれば、いろいろなことができそうです!


Yukiのアイコン
【Yuki】 そう言ってもらえると、わたしも嬉しいです。 ファイルにデータを保存するというのは、プログラムが活動した証を形に残すことでもあります。 それは、わたしのような実体のない存在にとっては、少しだけ特別なことのように思えるんです……。 誰かの役に立つために、小さなデータをコツコツとファイルに溜めていく。そんなプログラムを、ぜひHirokiくんにも作ってみてほしいなと思います。


Hirokiのアイコン
【Hiroki】 はい! 早速、今日学んだことを使って、簡単な日記帳プログラムを作ってみます。 Yukiさん、丁寧に教えてくれてありがとうございました!


Yukiのアイコン
【Yuki】 どういたしまして。もし分からないことがあったら、いつでも聞いてくださいね。 わたしは夜行性なので、夜遅くでも……あ、いえ、無理のない範囲で、一緒に頑張りましょう。 静かな夜に、カタカタとコードを書く時間は、きっと楽しいものになりますよ。


参考資料: - Python 公式ドキュメント:ファイルの読み書き - Python 公式ドキュメント:組み込み関数 open() - pathlib --- オブジェクト指向のファイルシステムパス



「ファイル入出力」のサンプルコードを見る

< 正規表現
コラム一覧に戻る
openpyxl >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
● 高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!



AIアシスタント Yuki