Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
open()
ファイルを開いてデータを読み書きするための組み込み関数です。with文と組み合わせて使うことで、ファイルのクローズ処理を自動化できます。
構文
# ファイルを開いてファイルオブジェクトを返します。
open(ファイルパス, mode='r', encoding=None)
# with 文でファイルを開くと、ブロック終了時に自動でクローズされます。
with open(ファイルパス, mode, encoding=エンコーディング) as f:
# ファイル操作
内容 = f.read()
# モードの種類
# 'r' 読み込み(デフォルト)
# 'w' 書き込み(ファイルを上書き)
# 'a' 追記(ファイルの末尾に追加)
# 'rb' バイナリ読み込み
# 'wb' バイナリ書き込み
関数一覧
| 関数・メソッド | 概要 |
|---|---|
| open(path, mode, encoding) | ファイルを開いてファイルオブジェクトを返します。encoding に 'utf-8' などを指定します。 |
| f.read(size=-1) | ファイルの内容を文字列として読み込みます。size を省略するとファイル全体を読み込みます。 |
| f.readline() | ファイルから1行を読み込んで返します。ファイルの末尾では空文字列を返します。 |
| f.readlines() | ファイルの全行を文字列のリストとして返します。各行の末尾には改行文字が含まれます。 |
| f.write(string) | 文字列をファイルに書き込みます。書き込んだ文字数を返します。 |
| f.writelines(lines) | 文字列のリストをファイルに書き込みます。改行文字は自動では付加されません。 |
| f.close() | ファイルを閉じます。with 文を使う場合は不要です。 |
サンプルコード
# with 文でファイルを書き込みます('w' モードは上書き)。
with open("greeting.txt", "w", encoding="utf-8") as f:
f.write("こんにちは!\n")
f.write("Pythonでファイルを書きました。\n")
# with ブロックを抜けると自動でクローズされます。
# with 文でファイルを読み込みます。
with open("greeting.txt", "r", encoding="utf-8") as f:
content = f.read() # ファイル全体を文字列として読み込みます。
print(content)
# 1行ずつ読み込むことで大きなファイルも省メモリで処理できます。
with open("greeting.txt", "r", encoding="utf-8") as f:
for line in f:
print(line, end="") # line の末尾には改行が含まれます。
# readline() で1行ずつ手動で読み込みます。
with open("greeting.txt", "r", encoding="utf-8") as f:
first_line = f.readline()
print(f"1行目: {first_line.strip()}")
# readlines() で全行をリストとして取得します。
with open("greeting.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print(f"行数: {len(lines)}")
# 'a' モードでファイルに追記します。
with open("greeting.txt", "a", encoding="utf-8") as f:
f.write("追記された行です。\n")
# 複数行をリストで書き込みます。
lines_to_write = ["行1\n", "行2\n", "行3\n"]
with open("output.txt", "w", encoding="utf-8") as f:
f.writelines(lines_to_write)
# CSV ファイルを処理する例です。
import csv
# CSV を書き込みます。
data = [["名前", "点数"], ["太郎", 85], ["花子", 92]]
with open("scores.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows(data)
# CSV を読み込みます。
with open("scores.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(row)
概要
ファイル操作では必ず『with』文を使ってください。『with』文を使わずに『open()』した場合、例外が発生したときにファイルがクローズされずリソースリークが起きる可能性があります。『with』文はブロックを抜けるときに(例外が発生した場合でも)自動的に『close()』を呼び出します。
テキストファイルを扱うときはエンコーディングを明示することを強く推奨します。『encoding="utf-8"』を指定しないと、実行環境のデフォルトエンコーディング(Windowsでは Shift_JIS など)が使われる可能性があり、文字化けの原因になります。
大きなファイルを読み込む際は、『read()』でファイル全体を一度にメモリに読み込むのではなく、『for line in f:』のようにファイルオブジェクトを直接反復することで省メモリで処理できます。イテレータの基本的な仕組みは『callable() / iter() / next()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。