【初心者向け】Pythonでファイルを開く・閉じる方法|open関数とcloseメソッドの基本
これまでのチュートリアルでは、標準入力・標準出力を使ったデータの読み書きを行ってきました。ここからは、実際のデータファイルを扱う方法を学んでいきましょう。
Pythonには、ファイル操作に必要な基本的な関数やメソッドが標準で用意されています。ほとんどのファイル操作は、ファイルオブジェクトを通じて行うことができます。
open() 関数とは
ファイルを読み書きする前に、まずPythonの組み込み関数である open() を使ってファイルを開く必要があります。この関数はファイルオブジェクトを作成し、そのオブジェクトに対して各種サポートメソッドを呼び出すことで、さまざまなファイル操作が可能になります。
open() の構文
file object = open(file_name [, access_mode][, buffering])
各パラメータの詳細は以下の通りです。
- file_name(ファイル名):アクセスしたいファイルの名前を含む文字列値です。
- access_mode(アクセスモード):ファイルを開くモード(読み取り、書き込み、追記など)を決定します。指定可能な値の一覧は後述の表を参照してください。省略可能なパラメータで、デフォルトは読み取りモード(r)です。
- buffering(バッファリング):0 を指定するとバッファリングは行われません。1 を指定すると、ファイルへのアクセス時にライン単位のバッファリングが行われます。1 より大きい整数を指定した場合は、その値をバッファサイズとしてバッファリングが実行されます。負の値を指定した場合は、システム既定のバッファサイズが使用されます(これがデフォルト動作です)。
ファイルを開くモード一覧
| No. | モードと説明 |
|---|---|
| 1 | r 読み取り専用でファイルを開きます。ファイルポインタはファイルの先頭に配置されます。デフォルトのモードです。 |
| 2 | rb バイナリ形式で読み取り専用としてファイルを開きます。ファイルポインタは先頭に配置されます。 |
| 3 | r+ 読み取りと書き込み両方のためにファイルを開きます。ファイルポインタは先頭に配置されます。 |
| 4 | rb+ バイナリ形式で読み書き両方のためにファイルを開きます。ファイルポインタは先頭に配置されます。 |
| 5 | w 書き込み専用でファイルを開きます。ファイルが存在する場合は上書きされ、存在しない場合は新規作成されます。 |
| 6 | wb バイナリ形式で書き込み専用としてファイルを開きます。既存ファイルは上書きされ、存在しない場合は新規作成されます。 |
| 7 | w+ 書き込みと読み取り両方のためにファイルを開きます。既存ファイルは上書きされ、存在しない場合は新規作成されます。 |
| 8 | wb+ バイナリ形式で読み書き両方のためにファイルを開きます。既存ファイルは上書きされ、存在しない場合は新規作成されます。 |
| 9 | a 追記モードでファイルを開きます。ファイルが存在する場合、ファイルポインタは末尾に配置されます。存在しない場合は書き込み用の新規ファイルが作成されます。 |
| 10 | ab バイナリ形式で追記モードとしてファイルを開きます。ファイルポインタは既存ファイルの末尾に配置され、存在しない場合は新規作成されます。 |
| 11 | a+ 追記と読み取り両方のためにファイルを開きます。ファイルポインタは既存ファイルの末尾に配置され、存在しない場合は新規作成されます。 |
| 12 | ab+ バイナリ形式で追記と読み取り両方のためにファイルを開きます。ファイルポインタは既存ファイルの末尾に配置され、存在しない場合は新規作成されます。 |
ファイルオブジェクトの属性
ファイルを開いてファイルオブジェクトを取得すると、そのファイルに関するさまざまな情報を取得できます。
ファイルオブジェクトに関連する主な属性は以下の通りです。
| No. | 属性と説明 |
|---|---|
| 1 | file.closed ファイルが閉じている場合は true、そうでなければ false を返します。 |
| 2 | file.mode ファイルを開いたときのアクセスモードを返します。 |
| 3 | file.name ファイル名を返します。 |
| 4 | file.softspace print 文で明示的にスペースが必要な場合は false、それ以外は true を返します。 |
サンプルコード
#!/usr/bin/python
# ファイルを開く
fo = open("foo.txt", "wb")
print("ファイル名 : ", fo.name)
print("閉じているか : ", fo.closed)
print("オープンモード : ", fo.mode)実行結果
上記のコードを実行すると、以下のような結果が出力されます。
ファイル名 : foo.txt 閉じているか : False オープンモード : wb
close() メソッド
ファイルオブジェクトの close() メソッドは、未書き込みの情報をフラッシュ(書き出し)してからファイルを閉じます。close() を呼び出した後は、それ以上の書き込みはできなくなります。
なお、Pythonではファイルオブジェクトへの参照が別のファイルに再割り当てされると、自動的に元のファイルが閉じられます。しかし、リソース管理の観点から、close() メソッドで明示的にファイルを閉じるのが良い習慣とされています。
close() の構文
fileObject.close()
close() のサンプルコード
#!/usr/bin/python
# ファイルを開く
fo = open("foo.txt", "wb")
print("ファイル名 : ", fo.name)
# 開いたファイルを閉じる
fo.close()実行結果
上記のコードを実行すると、以下のような結果が出力されます。
ファイル名 : foo.txt
さらに、Python 3 では with ステートメントを使うことで、処理終了後に自動的にファイルを閉じることができるため、close() の呼び忘れによるトラブルを防げます。日常的な開発では with open(...) の利用が推奨されています。
-
C#でテキストファイルを読み書きする方法【StreamReader・StreamWriterの使い方】
C#でテキストファイルを扱う際には、StreamReaderクラスとStreamWriterクラスを使用します。StreamReaderはテキストファイルからのデータ読み取り、StreamWriterはテキストファイルへのデータ書き込みをそれぞれ担当します。どちらもSystem.IO名前空間に属しており、usingディレクティブを使えば、処理終了後に自動的にリソースが解放されるため安全です。 テキストファイルを読み込む まずは、StreamReaderを使ってテキストファイルの内容を1行ずつ読み込み、コンソールに表示するサンプルコードを見てみましょう。 using System; using
-
PythonのopenpyxlでExcelファイルを読み書きする方法を徹底解説
はじめにopenpyxlは、Excel 2010形式のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。Office Open XML形式をPythonからネイティブに扱えるライブラリが存在しなかったことから、その不足を補うために誕生しました。業務などで使用するExcelファイルは「ワークブック(Workbook)」と呼ばれ、最低1枚、最大で数十枚のシートを含むことができます。各シートは、行が1から始まり、列がAから始まる構成になっています。openpyxlライブラリを使えば、シートの追加やデータの入力はもちろん、データの操作や削除まで、さまざま