言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Python辞典

  1. トップページ
  2. Python辞典
  3. open()

open()

対応: Python 2(2000)

ファイルを開いてデータを読み書きするための組み込み関数です。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 文を使う場合は不要です。

サンプルコード

open_basic.py
with open("greeting.txt", "w", encoding="utf-8") as f:
    f.write("こんにちは!\n")
    f.write("Pythonでファイルを書きました。\n")

with open("greeting.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

with open("greeting.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line, end="")

with open("greeting.txt", "r", encoding="utf-8") as f:
    first_line = f.readline()
    print(f"1行目: {first_line.strip()}")

with open("greeting.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    print(f"行数: {len(lines)}")

実行すると次のように出力されます。

python3 open_basic.py
こんにちは!
Pythonでファイルを書きました。

こんにちは!
Pythonでファイルを書きました。
1行目: こんにちは!
行数: 2
open_encoding.py
lines_to_write = ["行1\n", "行2\n", "行3\n"]
with open("output.txt", "w", encoding="utf-8") as f:
    f.writelines(lines_to_write)

with open("output.txt", "a", encoding="utf-8") as f:
    f.write("追記された行です。\n")

with open("output.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line, end="")

実行すると次のように出力されます。

python3 open_encoding.py
行1
行2
行3
追記された行です。
open_csv.py
import csv

data = [["名前", "点数"], ["八神庵", 85], ["草薙京", 92]]
with open("scores.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(data)

with open("scores.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

実行すると次のように出力されます。

python3 open_csv.py
['名前', '点数']
['八神庵', '85']
['草薙京', '92']

よくあるミス

よくあるミス1: with文を使わずにopen()する

with文を使わずにopen()した場合、例外が発生したときにファイルがクローズされずリソースリークが起きる可能性があります。with文はブロックを抜けるときに(例外が発生した場合でも)自動的にclose()を呼び出します。

f = open("data.txt", "w", encoding="utf-8")
f.write("内容")

次のように記述します。

with open("data.txt", "w", encoding="utf-8") as f:
    f.write("内容")

よくあるミス2: encodingを指定しない

encodingを指定しないと、実行環境のデフォルトエンコーディング(WindowsではShift_JISなど)が使われる可能性があります。エンコーディングを明示するとOSによる挙動の差異を避けられます。

with open("data.txt", "w") as f:
    f.write("こんにちは")

次のように記述します。

with open("data.txt", "w", encoding="utf-8") as f:
    f.write("こんにちは")

概要

ファイル操作では『with』文を使うとファイルが自動的に閉じられます。『with』文を使わずに『open()』した場合、例外が発生したときにファイルがクローズされずリソースリークが起きる可能性があります。『with』文はブロックを抜けるときに(例外が発生した場合でも)自動的に『close()』を呼び出します。

テキストファイルを扱うときはエンコーディングを明示するとOSによる挙動の差異を避けられます。『encoding="utf-8"』を指定しないと、実行環境のデフォルトエンコーディング(Windowsでは Shift_JIS など)が使われる可能性があり、文字化けの原因になります。

大きなファイルを読み込む際は、『read()』でファイル全体を一度にメモリに読み込むのではなく、『for line in f:』のようにファイルオブジェクトを直接反復することで省メモリで処理できます。イテレータの基本的な仕組みは『callable() / iter() / next()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。