Python open関数の基礎|ファイルを開く基本操作
Python open関数の基本的な使い方と実用的な活用法を初心者向けに解説。ファイルの読み書き操作を安全に行う方法を学びましょう。
みなさん、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("ファイルが見つかりません")
try
とexcept
を使ってエラーを処理します。
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行ずつ読み取る
- 空行とコメント行(#で始まる行)をスキップ
key=value
形式の行を辞書に保存- エラーが起きても安全に処理
設定ファイルの形式:
# 設定ファイル(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("データ処理を完了しました")
このログ関数の特徴:
- 現在の日時を自動的に追加
- 追記モード(
"a"
)で既存のログを保持 - ファイル名を指定しなければ
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"
を指定 - エラー処理で安全なプログラムを作る
実践での活用
よく使われる場面:
- 設定ファイルの読み込み
- ログファイルの作成
- データファイルの処理
- 結果の保存
段階的な学習のすすめ
- 基本をマスター:
with
文を使った読み書きから - エラー処理を追加:安全なプログラムの作成
- 実践で活用:実際のプロジェクトで使ってみる
ファイル操作はPythonプログラミングの基本的なスキルです。 設定ファイルの読み込み、ログの出力、データの保存など、実用的なプログラムには欠かせません。
まずは簡単なテキストファイルの読み書きから始めて、だんだんと複雑な処理にチャレンジしてみてください。
きっと「ファイル操作ができるようになって、プログラムが実用的になった!」と実感できるはずです。