PythonファイルI/O:入出力操作をマスターする
画面への出力
出力を生成する最も簡単な方法は、print文を使用することです。カンマで区切られたゼロ個以上の式を渡すことができます。この関数は、渡された式を文字列に変換し、標準出力に結果を書き込みます。
#!/usr/bin/python
print("Python is really a great language,", "isn't it?")
これにより、標準画面に以下の結果が出力されます。
Python is really a great language, isn't it?
キーボードからの入力
Pythonは、標準入力(デフォルトではキーボード)から1行のテキストを読み取るための2つの組み込み関数を提供しています。
raw_inputinput
raw_input関数
raw_input([prompt])関数は、標準入力から1行を読み取り、文字列として返します(末尾の改行文字は削除されます)。
#!/usr/bin/python
str = raw_input("Enter your input: ")
print("Received input is : ", str)
これにより、任意の文字列の入力を促し、同じ文字列を画面に表示します。"Hello Python!"と入力した場合、出力は以下のようになります。
Enter your input: Hello Python
Received input is : Hello Python
input関数
input([prompt])関数はraw_inputと同等ですが、入力が有効なPython式であると見なし、評価結果を返します。
#!/usr/bin/python
str = input("Enter your input: ")
print("Received input is : ", str)
入力に対して以下のような結果が得られます。
Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is : [10, 20, 30, 40]
ファイルのオープンとクローズ
これまで、標準入力と標準出力の読み書きを行ってきました。ここでは、実際のデータファイルの使用方法を見ていきます。
Pythonは、デフォルトでファイル操作に必要な基本的な関数とメソッドを提供しています。ほとんどのファイル操作はfileオブジェクトを使用して行えます。
open関数
ファイルを読み書きするには、Pythonの組み込み関数open()を使用してファイルを開く必要があります。この関数はfileオブジェクトを作成し、それに関連する他のサポートメソッドを呼び出すために使用されます。
構文
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+ - バイナリ形式で追記と読み取り両用。ファイルが存在すれば末尾に、なければ新規作成。 |
fileオブジェクトの属性
ファイルが開かれ、fileオブジェクトを取得すると、そのファイルに関するさまざまな情報を取得できます。
| 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("Name of the file: ", fo.name)
print("Closed or not : ", fo.closed)
print("Opening mode : ", fo.mode)
print("Softspace flag : ", fo.softspace)
実行結果:
Name of the file: foo.txt
Closed or not : False
Opening mode : wb
Softspace flag : 0
close()メソッド
fileオブジェクトのclose()メソッドは、未書き込みの情報をフラッシュし、ファイルオブジェクトを閉じます。閉じた後は書き込みできなくなります。
Pythonは、ファイルの参照オブジェクトが別のファイルに再代入されると自動的にファイルを閉じます。ただし、明示的にclose()メソッドを使用してファイルを閉じるのが良い習慣です。
構文
fileObject.close()
例
#!/usr/bin/python
# ファイルを開く
fo = open("foo.txt", "wb")
print("Name of the file: ", fo.name)
# 開いたファイルを閉じる
fo.close()
ファイルの読み書き
fileオブジェクトは、操作を容易にするアクセスメソッドのセットを提供します。read()とwrite()メソッドを使用してファイルの読み書きを行う方法を見ていきます。
write()メソッド
write()メソッドは、任意の文字列を開いたファイルに書き込みます。Pythonの文字列にはテキストだけでなくバイナリデータも含められることに注意してください。
write()メソッドは、文字列の末尾に改行文字('\n)を追加しません。
構文
fileObject.write(string)
パラメータは、開いたファイルに書き込む内容です。
例
#!/usr/bin/python
# ファイルを開く
fo = open("foo.txt", "wb")
fo.write("Python is a great language.\nYeah its great!!\n")
# 開いたファイルを閉じる
fo.close()
このメソッドはfoo.txtファイルを作成し、指定した内容を書き込み、最後にファイルを閉じます。このファイルを開くと以下の内容になります。
Python is a great language.
Yeah its great!!
read()メソッド
read()メソッドは、開いたファイルから文字列を読み取ります。Pythonの文字列にはテキストデータ以外にバイナリデータも含められることに注意してください。
構文
fileObject.read([count])
パラメータは、開いたファイルから読み取るバイト数です。このメソッドはファイルの先頭から読み取りを開始し、countが省略されている場合は、ファイルの末尾まで可能な限り読み取ろうとします。
例
上記で作成したfoo.txtファイルを使用します。
#!/usr/bin/python
# ファイルを開く
fo = open("foo.txt", "r+")
str = fo.read(10)
print("Read String is : ", str)
# 開いたファイルを閉じる
fo.close()
実行結果:
Read String is : Python is
ファイル位置
tell()メソッドは、ファイル内の現在位置を知らせます。つまり、次の読み取りまたは書き込みが、ファイルの先頭から何バイト目で発生するかを示します。
seek(offset[, from])メソッドは、現在のファイル位置を変更します。offset引数は移動するバイト数を示し、from引数はバイト移動の基準位置を指定します。
fromが0の場合:ファイルの先頭を基準位置とするfromが1の場合:現在位置を基準位置とするfromが2の場合:ファイルの末尾を基準位置とする
例
#!/usr/bin/python
# ファイルを開く
fo = open("foo.txt", "r+")
str = fo.read(10)
print("Read String is : ", str)
# 現在位置を確認
position = fo.tell()
print("Current file position : ", position)
# ポインタを先頭に再配置
position = fo.seek(0, 0)
str = fo.read(10)
print("Again read String is : ", str)
# 開いたファイルを閉じる
fo.close()
実行結果:
Read String is : Python is
Current file position : 10
Again read String is : Python is
ファイルのリネームと削除
Pythonのosモジュールは、ファイル名の変更や削除などのファイル処理操作を実行するメソッドを提供します。
このモジュールを使用するには、まずインポートしてから関連関数を呼び出します。
rename()メソッド
rename()メソッドは、現在のファイル名と新しいファイル名の2つの引数を取ります。
os.rename(current_file_name, new_file_name)
例
#!/usr/bin/python
import os
# 既存ファイル test1.txt を test2.txt にリネーム
os.rename("test1.txt", "test2.txt")
remove()メソッド
remove()メソッドを使用して、削除するファイル名を引数として指定することでファイルを削除できます。
os.remove(file_name)
例
#!/usr/bin/python
import os
# 既存ファイル test2.txt を削除
os.remove("text2.txt")
Pythonでのディレクトリ操作
すべてのファイルはさまざまなディレクトリに格納されており、Pythonもこれらを問題なく扱えます。osモジュールには、ディレクトリの作成、削除、変更を支援するメソッドがいくつかあります。
mkdir()メソッド
osモジュールのmkdir()メソッドを使用して、カレントディレクトリにディレクトリを作成できます。作成するディレクトリ名を引数として指定します。
os.mkdir("newdir")
例
#!/usr/bin/python
import os
# カレントディレクトリに "test" ディレクトリを作成
os.mkdir("test")
chdir()メソッド
chdir()メソッドを使用して、カレントディレクトリを変更できます。カレントディレクトリにしたいディレクトリ名を引数として指定します。
os.chdir("newdir")
例
#!/usr/bin/python
import os
# "/home/newdir" ディレクトリに移動
os.chdir("/home/newdir")
getcwd()メソッド
getcwd()メソッドは、現在の作業ディレクトリを表示します。
os.getcwd()
例
#!/usr/bin/python
import os
# 現在のディレクトリの場所を取得
os.getcwd()
rmdir()メソッド
rmdir()メソッドは、引数として渡されたディレクトリを削除します。
ディレクトリを削除する前に、その中のすべての内容を削除しておく必要があります。
os.rmdir('dirname')
例
#!/usr/bin/python
import os
# "/tmp/test" ディレクトリを削除。フルパス指定が必要
os.rmdir("/tmp/test")
ファイル・ディレクトリ関連メソッド
WindowsおよびUnixオペレーティングシステムでファイルとディレクトリを処理・操作するための幅広いユーティリティメソッドを提供する3つの重要なソースがあります。
- File Object Methods: fileオブジェクトはファイル操作のための関数を提供
- OS Object Methods: ファイルとディレクトリの両方を処理するメソッドを提供
Python
- ミルファイル(平ヤスリ)完全ガイド:木工・金工の必須工具
- C言語入出力(I/O)マスター:scanf()とprintf()徹底解説
- C言語 ファイル入出力: fopen, fprintf, fread, fseek をマスターする
- C言語ファイルI/O完全ガイド:作成、オープン、管理の実践
- C言語ヘッダーファイルの理解:種類、使い方、ベストプラクティス
- C++ファイルI/O完全マスター:fstreamによる読み書き
- C#ファイルI/O:Stream、FileStream、StreamReader/Writerによる読み書き
- Python I/Oとモジュールインポート完全マスター: 実践ガイド
- PythonファイルI/O:ファイル操作、読み書き、管理のマスター
- Pythonディレクトリ・ファイル操作マスター:作成、移動、一覧、リネーム、削除
- Pythonでファイル・ディレクトリの存在確認:実践ガイド