Python では、すべてのデータ項目が Python オブジェクトです。したがって、によって返されるものはすべてopen()
オブジェクトです。具体的にはfile
、ファイル ハンドルを表すオブジェクトです。
あなたはすでにこれを行う方法を知っています:
handle = open("some_file.txt, "r")
これは、概念的には、C の同等のものと非常によく似ています。
FILE *handle;
handle = fopen("some_file.txt", "r");
handle
C では、その変数でできる唯一の便利なことは、 のような呼び出しに渡すことfread()
です。Python では、オブジェクトにメソッド関数が関連付けられています。したがって、ファイルから 100 バイトを読み取り、それを閉じる C は次のとおりです。
FILE *handle;
handle = fopen("some_file.txt", "r");
result = fread(buffer, 1, 100 handle); // read 100 bytes into buffer
fclose(handle);
そして、これは同等の Python です:
handle = open("some_file.txt", "r");
handle.read(100)
handle.close()
Python の関数とオブジェクトについて詳しく調べるにはhelp()
、Python プロンプトから組み込みコマンドを使用するのが良い方法です。試してみるhelp(open)
と、多くはわかりませんが、ファイル オブジェクトが返されることがわかります。それで、試しhelp(file)
てみると、たくさんの情報が得られます。.close()
メソッド、.read()
、および などの他の方法について読むことができます.readlines()
。
しかし、あなたを混乱させたのは、ハンドル オブジェクトの反復処理でした。非常に一般的なケースはファイルから行を読み取ることであるため、Python はファイル ハンドルをiteratorとして機能させ、反復するとファイルから一度に 1 行ずつ取得します。
Python のリスト オブジェクトはindexableとiterableの両方であるため、名前が付けられたリストがある場合は、ora
の両方を実行できます。アイテムを位置で検索する、 は索引付けです。ファイル ハンドル オブジェクトはインデックス作成をサポートしていませんが、反復はサポートしています。a[i]
for x in a:
a[i]
ここでのいくつかの回答では、with
ステートメントが表示されます。これは Python でのベスト プラクティスです。with
ステートメントは、Python の一部の種類のオブジェクトでのみ機能します。オブジェクトは、いくつかの特別なメソッド関数をサポートする必要があります。現時点で本当に知っておく必要がwith
あるのは、それを使用できるようになったときに、必要な初期化とファイナライズの作業がいくつか行われるということだけです。ファイルを開く場合、with
ステートメントはファイルを閉じます。重要な部分はwith
、コードが例外を発生させた場合でも、ステートメントがファイナライズが行われることを保証することです。
上記の例の慣用的な Python は次のとおりです。
with open("some_file.txt") as handle:
buffer = handle.read(100)