Python open関数の基礎|ファイルを開く基本操作

Python open関数の基本的な使い方と実用的な活用法を初心者向けに解説。ファイルの読み書き操作を安全に行う方法を学びましょう。

Learning Next 運営
20 分で読めます

みなさん、Pythonでファイルを操作したいと思ったことはありますか?

「テキストファイルの中身を読みたい」 「プログラムの結果をファイルに保存したい」 「データをファイルから取り込みたい」

こんなことを考えたことがある方も多いのではないでしょうか。

Pythonにはopen関数という便利な機能があります。 この記事では、ファイル操作の基本から実践的な使い方まで、初心者にも分かりやすく解説します。

一緒にPythonのファイル操作をマスターしましょう!

open関数って何?

open関数は、ファイルを開いて読み書きするためのPythonの基本機能です。

簡単に言うと、コンピューターのファイルとプログラムをつなぐ「橋渡し」の役割をしてくれます。

基本的な使い方

まずは一番シンプルな使い方を見てみましょう。

# ファイルを開く基本形
file = open("sample.txt", "r")
# ファイルの内容を操作
file.close() # 必ず閉じる

この3行がopen関数の基本パターンです。

1行目でファイルを開いて、2行目で操作して、3行目で閉じます。 ファイルを開いたら、必ず閉じることが大切です。

ファイルモードとは?

open関数では「モード」を指定してファイルの操作方法を決めます。

主なモードはこちらです:

  • "r":読み取り専用(ファイルの中身を見るだけ)
  • "w":書き込み専用(新しく書き込む、既存の内容は消える)
  • "a":追記モード(既存の内容の後ろに追加)

最初は"r"(読み取り)から始めるのがおすすめです。

ファイルを読んでみよう

まずは、ファイルの中身を読む方法を学びましょう。

これができるようになると、テキストファイルのデータを取り込めるようになります。

ファイル全体を読み取る

ファイルの中身を全部読む方法です。

# ファイル全体を読み取る
file = open("sample.txt", "r")
content = file.read()
print(content)
file.close()

このコードでは、read()メソッドを使っています。

sample.txtファイルの中身を全部読み取って、contentという変数に保存します。 そしてprint()で画面に表示して、最後にファイルを閉じます。

1行ずつ読み取る

ファイルを1行ずつ読む方法もあります。

# 1行ずつ読み取る
file = open("sample.txt", "r")
line = file.readline()
while line:
print(line.strip()) # 改行文字を除去
line = file.readline()
file.close()

readline()メソッドで1行ずつ読み取ります。

strip()は改行文字を取り除くために使います。 whileループで、ファイルの最後まで繰り返し読み取ります。

全行をリストで読み取る

すべての行をリストとして取得する方法です。

# 全行をリストで読み取る
file = open("sample.txt", "r")
lines = file.readlines()
for line in lines:
print(line.strip())
file.close()

readlines()メソッドで、全ての行がリストになります。

各行が文字列としてlinesリストに入ります。 forループで1行ずつ処理できるので便利ですね。

ファイルに書き込んでみよう

次は、ファイルにデータを書き込む方法を学びましょう。

プログラムの結果を保存したい時に役立ちます。

新しいファイルを作る・上書きする

ファイルを新しく作ったり、既存のファイルを上書きする方法です。

# ファイルを新規作成または上書き
file = open("output.txt", "w")
file.write("Hello, World!
")
file.write("Pythonでファイルを作りました。
")
file.close()

"w"モードでファイルを開きます。

write()メソッドで文字列をファイルに書き込みます。 は改行を表す記号です。

注意:"w"モードは既存のファイルの中身を全て削除してから書き込みます。

複数行をまとめて書き込む

複数行を一度に書き込む方法です。

# 複数行をまとめて書き込み
lines = ["1行目のテキスト
", "2行目のテキスト
", "3行目のテキスト
"]
file = open("output.txt", "w")
file.writelines(lines)
file.close()

writelines()メソッドで、リストの各要素を順番に書き込みます。

各行の最後に をつけることで、改行されます。

既存ファイルに追加する

既存のファイルの最後に新しい内容を追加する方法です。

# 既存ファイルに追記
file = open("output.txt", "a")
file.write("追加のテキスト
")
file.close()

"a"モードを使うと、既存の内容を残したまま最後に追加できます。

ログファイルの作成などでよく使われる方法です。

with文で安全にファイル操作

with文を使うと、ファイルを自動的に閉じてくれるのでとても安全です。

これは「おすすめの方法」なので、ぜひ覚えてください。

with文の基本的な使い方

with文を使ったファイルの読み取りです。

# with文を使った読み取り
with open("sample.txt", "r") as file:
content = file.read()
print(content)
# ここでファイルが自動的に閉じられる

このコードのポイントを説明しますね。

with open() as file:という書き方をします。 ブロックを抜ける時に、自動的にファイルが閉じられます。

file.close()を書き忘れる心配がないので安心です。

with文でファイルに書き込み

with文を使った書き込みも見てみましょう。

# with文を使った書き込み
with open("output.txt", "w") as file:
file.write("with文を使った書き込み
")
file.write("安全にファイルを操作できます
")

エラーが発生しても確実にファイルが閉じられます。

これがwith文の一番のメリットです。

複数ファイルを同時に開く

複数のファイルを同時に開くこともできます。

# 複数のファイルを同時に開く
with open("input.txt", "r") as input_file, open("output.txt", "w") as output_file:
content = input_file.read()
output_file.write(f"処理済み: {content}")

ファイルをコピーしたり、変換したりする時に便利です。

カンマで区切って、複数のファイルを指定できます。

日本語ファイルの扱い方

日本語を含むファイルを扱う時は、文字エンコーディングを指定する必要があります。

これを忘れると文字化けの原因になります。

日本語ファイルを読み取る

日本語ファイルを読み取る時の書き方です。

# UTF-8エンコーディングでファイルを開く
with open("japanese.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)

encoding="utf-8"を追加します。

UTF-8は日本語を含む多くの言語に対応した文字エンコーディングです。 現在最も広く使われている形式ですね。

日本語ファイルに書き込む

日本語でファイルに書き込む方法です。

# UTF-8エンコーディングで書き込み
with open("japanese_output.txt", "w", encoding="utf-8") as file:
file.write("こんにちは、世界!
")
file.write("Pythonで日本語ファイルを作成しました。
")

書き込み時も同様にencoding="utf-8"を指定します。

これで日本語を含むファイルを正しく扱えるようになります。

エラーが起きた時の対処法

ファイル操作では、いろいろなエラーが起きる可能性があります。

エラーに備えた書き方を覚えておきましょう。

ファイルが見つからない時

ファイルが存在しない場合の対処法です。

# ファイルが存在しない場合の処理
try:
with open("nonexistent.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("ファイルが見つかりません")

tryexceptを使ってエラーを処理します。

FileNotFoundErrorは、ファイルが見つからない時に発生するエラーです。 このエラーをキャッチして、適切なメッセージを表示します。

権限がない時の対処

ファイルの読み書き権限がない場合の対処法です。

# 権限エラーの処理
try:
with open("readonly.txt", "w") as file:
file.write("書き込みテスト")
except PermissionError:
print("ファイルの書き込み権限がありません")

PermissionErrorは、権限がない時に発生するエラーです。

読み取り専用ファイルに書き込もうとした時などに起きます。

いろいろなエラーに対応する

複数のエラーに同時に対応する方法です。

# 複数のエラーを包括的に処理
try:
with open("sample.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("ファイルが見つかりません")
except PermissionError:
print("ファイルアクセス権限がありません")
except UnicodeDecodeError:
print("ファイルの文字エンコーディングが正しくありません")
except Exception as e:
print(f"予期しないエラーが発生しました: {e}")

複数のexceptで、それぞれのエラーに対応できます。

最後のExceptionは、予想外のエラーをキャッチする「安全網」です。

実際に使ってみよう

ここまでの知識を使って、実践的な例を見てみましょう。

実際のプログラムでよく使われるパターンです。

設定ファイルを読み込む

設定ファイルを読み取る関数を作ってみます。

# 設定ファイルの読み取り
def load_config(filename):
config = {}
try:
with open(filename, "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
if line and not line.startswith("#"): # コメント行を除く
key, value = line.split("=", 1)
config[key.strip()] = value.strip()
except FileNotFoundError:
print(f"設定ファイル '{filename}' が見つかりません")
return config
# 使用例
settings = load_config("config.txt")
print(settings)

この関数は以下のことをしています:

  1. ファイルを1行ずつ読み取る
  2. 空行とコメント行(#で始まる行)をスキップ
  3. key=value形式の行を辞書に保存
  4. エラーが起きても安全に処理

設定ファイルの形式:

# 設定ファイル(config.txt) debug=true max_users=100 database_url=localhost:5432

ログファイルに記録する

プログラムの動作をログファイルに記録する関数です。

# ログファイルの書き込み
import datetime
def write_log(message, filename="app.log"):
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] {message}
"
with open(filename, "a", encoding="utf-8") as file:
file.write(log_entry)
# 使用例
write_log("アプリケーションを開始しました")
write_log("データ処理を完了しました")

このログ関数の特徴:

  1. 現在の日時を自動的に追加
  2. 追記モード("a")で既存のログを保持
  3. ファイル名を指定しなければapp.logに保存

出力例:

[2025-01-07 10:30:15] アプリケーションを開始しました [2025-01-07 10:30:16] データ処理を完了しました

CSVファイルを処理する

CSVファイル(カンマ区切りファイル)を読み取る例です。

# CSVファイルの簡単な処理
def process_csv(filename):
data = []
try:
with open(filename, "r", encoding="utf-8") as file:
header = file.readline().strip().split(",")
for line in file:
values = line.strip().split(",")
row = dict(zip(header, values))
data.append(row)
except FileNotFoundError:
print(f"ファイル '{filename}' が見つかりません")
return data
# 使用例
csv_data = process_csv("data.csv")
for row in csv_data:
print(row)

CSVファイルの例(data.csv):

名前,年齢,職業 田中太郎,25,エンジニア 佐藤花子,30,デザイナー

処理結果:

{'名前': '田中太郎', '年齢': '25', '職業': 'エンジニア'} {'名前': '佐藤花子', '年齢': '30', '職業': 'デザイナー'}

知っておきたい注意点

ファイル操作で気をつけるべきポイントをまとめました。

これを知っておくと、トラブルを避けられます。

ファイルパスの指定方法

ファイルの場所を指定する方法について説明します。

import os
# 相対パス(現在のフォルダから)
with open("data.txt", "r") as file:
content = file.read()
# 絶対パス(フルパス)
full_path = os.path.abspath("data.txt")
with open(full_path, "r") as file:
content = file.read()

相対パスは「今いる場所からの道のり」です。 絶対パスは「住所全体」のようなものですね。

ファイルが存在するかチェック

ファイルを開く前に、存在を確認する方法です。

import os
filename = "sample.txt"
if os.path.exists(filename):
with open(filename, "r") as file:
content = file.read()
print(content)
else:
print(f"ファイル '{filename}' が存在しません")

os.path.exists()でファイルの存在を確認できます。

事前にチェックしておくと、エラーを避けられます。

画像ファイルなどの扱い

テキストファイル以外(画像、動画など)を扱う場合です。

# バイナリファイルの読み取り
with open("image.jpg", "rb") as file: # "rb"でバイナリ読み取り
data = file.read()
print(f"ファイルサイズ: {len(data)} バイト")
# バイナリファイルのコピー
with open("copy.jpg", "wb") as file: # "wb"でバイナリ書き込み
file.write(data)

画像や動画ファイルは"rb"(読み取り)や"wb"(書き込み)を使います。

"b"は「バイナリ」を意味します。

まとめ

Pythonのopen関数について、基本から実践まで詳しく解説しました。

最後に重要なポイントをまとめておきますね。

覚えておきたい基本

open関数の基本形

  • open(ファイル名, モード)でファイルを開く
  • 読み取りは"r"、書き込みは"w"、追記は"a"
  • 必ずファイルを閉じる

おすすめの書き方

  • with文を使って自動的にファイルを閉じる
  • 日本語ファイルではencoding="utf-8"を指定
  • エラー処理で安全なプログラムを作る

実践での活用

よく使われる場面

  • 設定ファイルの読み込み
  • ログファイルの作成
  • データファイルの処理
  • 結果の保存

段階的な学習のすすめ

  1. 基本をマスターwith文を使った読み書きから
  2. エラー処理を追加:安全なプログラムの作成
  3. 実践で活用:実際のプロジェクトで使ってみる

ファイル操作はPythonプログラミングの基本的なスキルです。 設定ファイルの読み込み、ログの出力、データの保存など、実用的なプログラムには欠かせません。

まずは簡単なテキストファイルの読み書きから始めて、だんだんと複雑な処理にチャレンジしてみてください。

きっと「ファイル操作ができるようになって、プログラムが実用的になった!」と実感できるはずです。

関連記事