ファイル
ファイルとは、名前を持つ外部メモリ内のデータ セットです。
Python には 2 種類のファイルがあります。
-
テキスト、改行されたテキストを含む;テキスト ファイルの特殊文字のうち、改行文字 ("
\n
") と行頭への復帰 ("
\r
") のみを使用できます。 ;);
-
バイナリ: バイナリ データを無制限に保存します (画像、音声、ビデオなど)。
次に、テキスト ファイルの操作について考えます。
プログラムからファイルを操作する原則
次の 3 つの段階で構成されます。
1. ファイルを開く;
2. ファイルを操作する;
3. ファイルを閉じます。
この操作の原則は、
「サンドイッチの原則」と呼ばれます。
ファイルを開くと、操作モードが示されます: データの読み取り、書き込み、またはファイルの末尾への追加。開いているファイルはブロックされており、他のプログラムはアクセスできません。 ファイルを操作した後、ファイルを閉じてプログラムとの接続を切断する必要があります。ファイルを閉じると、プログラムによってこのファイルに加えられたすべての変更がディスクに書き込まれます。 Python は、ファイル変数を介してファイルを操作します。
open()
関数を使用すると、
ファイルを開くことができ、ファイルへのアクセスに使用できるファイル変数が返されます。
f = open(file_name, access_mode)
,
ここで:
-
file_name
- 開くファイルの名前
-
access_mode
- ファイルを開くモード。読み取り、書き込みなどがあります。特に指定がない限り、デフォルトのモードは読み取り (r) です。
ファイルを開くモードの完全なリスト
<頭>
モード |
説明 |
<本体>
r |
読み取り専用。 |
w |
書き込みのみ可能。指定された名前のファイルが見つからない場合、新しいファイルを作成します。 |
rb |
読み取り専用 (バイナリ)。 |
wb |
書き込み専用 (バイナリ)。指定された名前のファイルが見つからない場合、新しいファイルを作成します。 |
r+ |
読み書き用 |
rb+ |
読み書き用 (バイナリ) |
w+ |
読み書き用。指定された名前のファイルが見つからない場合、新しい書き込み可能なファイルを作成します。 |
wb+ |
読み書き用 (バイナリ)。指定された名前のファイルが見つからない場合、新しい書き込み可能なファイルを作成します。 |
a |
新しいコンテンツを追加するために開きます。指定された名前のファイルが見つからない場合、新しい書き込み可能なファイルを作成します。 |
a+ |
新しいコンテンツを追加するために開きます。指定された名前のエントリが見つからない場合、新しいファイルを作成してエントリを読み取ります。 |
ab |
新しいコンテンツ (バイナリ) を追加するために開きます。指定された名前のファイルが見つからない場合、新しい書き込み可能なファイルを作成します。 |
ab+ |
新しいコンテンツ (バイナリ) を追加するために開きます。指定された名前のエントリが見つからない場合、新しいファイルを作成してエントリを読み取ります。 |
表>
close()
メソッドを使用すると、ファイルを閉じることができます。
例
Fin = open("input.txt")
Fout = open("output.txt")
# ファイルで何かをする
fout.close()
Fin.close()
プレ>
既存のファイルを書き込み用に開いた場合、その内容は破棄されます。プログラムの終了後、開いているすべてのファイルは自動的に閉じられます。
ファイルからのデータの読み取り
テキスト ファイルを読み取る場合、バイト ストリームがプログラム入力に次々と順番に入力されるため、ファイルはデータへの順次アクセスを提供します。つまり、ファイルから 10 番目の値を読み取る必要がある場合は、最初に前の 9 を読み取る必要があります。
ファイルの 1 行を読み取ると、 readline() メソッドを実行できます。このメソッドはファイル変数に対して呼び出されます。
Fin = open("input.txt")
s = Fin.readline()
読み取った文字列には、キーボードから読み取るときに使用されるものと同様のさまざまなメソッド (split() 、map() など) を適用できます。たとえば、ファイルの行にスペースで区切られた 2 つの数値がある場合、次のように数えることができます。
Fin = open("input.txt")
s = Fin.readline().split() # スペースで行を分割 s = ["2007", "2021"]
a, b = マップ(int, s) # int() メソッドをリストのすべての要素に適用します。
# つまり文字列を数値に変換します
# a, b = int(s[0], s[1]) # これは上の行と同じです
# a, b = [int(x) for x in s] # ジェネレーターと同じ
read() メソッドは、ファイルの内容全体を読み取り、文字 '\n ' を含む可能性のある文字列を返します。整数パラメータが read() メソッドに渡された場合、指定された数を超える文字は読み取られません。たとえば、read(1) . メソッドを使用してファイルをバイトごとに読み取ることができます。
ファイルが開かれると、ファイル内の現在位置を決定するポインタはファイルの先頭に設定され、読み取られると、読み取られたデータの次の位置に移動されます。書き込み時には、ポインタは次の空き位置に移動します。
|
データをファイルに書き込む
write() メソッドは、データをファイルに書き込むために使用されます。数値データは文字列に変換する必要があります。これは、 format() メソッドまたは str() メソッドのいずれかを使用して実行できます。
複数行のファイル
複数行のファイルを扱う場合は、ファイル内のデータがいつなくなるかを把握する必要があります。これを行うには、 readline() メソッドの機能を使用できます。ファイル カーソルがファイルの末尾を指している場合、 readline() メソッドは空の文字列。偽のブール値として認識されます。
True の場合:
s = Fin.readline()
そうでない場合: ブレーク # 文字列の読み取り時に空の文字列を受け取った場合、
# ループはbreak文で終了します
print(s, end="") # ファイルから行を読み取るときは改行を無効にします
# 改行文字「\n」保存しました
複数行のファイルからデータを読み取るその他の方法
1. リスト内のすべてのデータを直ちに表示します。
Fin = open("input.txt")
list_strings = Fin.readlines() # すべての行を一度に読み取ります
Fin.close()
list_strings の の場合:
print(s, end="")
2. with-as という構造を使用します。この場合、ファイルはサイクルの終了後に自動的に閉じられます。
open("input.txt") を Fin として使用:
Fin の s について:
print(s, end="")
この構造により、ファイルは確実に閉じられます。
3. Python 言語のスタイルで文字列を反復処理する方法 (この方法を使用することをお勧めします)。この場合、ファイルも自動的に閉じられます。
open("input.txt") の の場合:
print(s, end="")
プレ>
|
キリル文字ファイル
ファイルにロシア語の文字 (コードが 127 より大きい文字) が含まれている場合は、ファイルを開くときにエンコードを指定する必要があります。
data = open("input.txt", "r", encoding="utf-8")
|