GeeksforGeeks
前提条件。
- アクセスモード
- ファイルを開く
- ファイルを閉じる
Pythonには、ファイルを作成、書き込み、読み取るための機能が組み込まれています。 pythonで扱えるファイルには、通常のテキストファイルとバイナリファイル(0と1のバイナリ言語で書かれたファイル)の2種類があります。
Reading line by line
Using readlines()
readlines()は、一度にすべての行を読み込んで、各行をリストの文字列要素として返します。 この関数は、ファイルの内容全体をメモリに読み込んだ後、各行に分割するため、小さなファイルに使用することができます。 このリストを繰り返し処理し、 strip() 関数を使用して改行文字 ‘\n’ を除去することができます。
例を示します。
=
file1
=
open
(
'myfile.txt'
,
'w'
)
file1.writelines(L)
file1.close()
file1
=
open
(
'myfile.txt'
,
'r'
)
Lines
=
file1.readlines()
count
=
0
for
line
in
Lines:
count
+
=
1
div
print
(
"Line{}: {}"
.
format
(count, line.strip()))
出力します。
Line1: GeeksLine2: forLine3: Geeks
readline()の使用
readline()関数は、ファイルの一行を読み込んで、文字列の形で返します。 パラメータnには、読み込まれる最大バイト数を指定します。 ただし、nが行の長さを超えていても、1行以上の読み込みは行いません。 readline()は、ファイルの次の行を返しますが、その行の最後には改行文字が含まれています。 また、ファイルの終わりに到達した場合は、空の文字列を返します。
例を示します。
L
=
file1
=
open
(
'myfile.txt'
,
'w'
)
file1.writelines((L))
file1.close()
file1
=
div open
(
'myfile.txt'
,
'r'
)
count
=
div 0
while
True
:
iv
count
+
=
1
line
=
file1.readline()
if
not
line:
break
print
(
"Line{}: {}"
.
format
(count, line.strip()))
file1.close()
です。
出力です。
Line1 GeeksLine2 forLine3 Geeks
forループの使用
open()関数でファイルを開く際に反復可能なオブジェクトが返されます。 ファイルを一行ごとに読み込む最後の方法として、forループでファイルオブジェクトを繰り返し処理する方法があります。 この方法では、Pythonの組み込み関数を利用して、イテレート可能なオブジェクトを使用しながら、forループを使用して暗黙的にファイルオブジェクトをイテレートすることができます。 この方法は、コードの行数が少なくて済み、常に従うべきベスト プラクティスと言えます。
例を示します。
L
=
file1
=
open
(
'myfile.txt'
,
'w'
)
file1.writelines(L)
file1.close()
file1
=
open
(
'myfile.txt'
,
'r'
)
count
=
0
print
(
"Using for loop"
)
for
line
in
file1:
count
+
=
1
print
(
"Line{}: {}"
.
format
(count, line.strip()))
file1.close()
出力します。
Using for loopLine1: GeeksLine2: forLine3: Geeks
With ステートメント
上記のアプローチでは、ファイルを開くたびに明示的に閉じる必要があります。 ファイルを閉じるのを忘れると、コードにいくつかのバグが発生する可能性があります。つまり、ファイルの多くの変更は、ファイルが適切に閉じられるまで有効になりません。 これを防ぐために、with文を使うことができます。 PythonのWith文は、例外処理の際に使用され、コードをすっきりさせ、より読みやすくします。 また、ファイルストリームのような共通リソースの管理を簡単にします。 次のコード例では、with文の使用によりコードがどのようにすっきりするかを観察してください。 with文を使うと、file.close()を呼び出す必要がありません。 with ステートメント自体が、リソースの適切な取得と解放を保証します。
例を挙げます。
L
=
with
open
(
"myfile.txt"
,
"w"
) as fp:
fp.writelines(L)
count
=
div 0
print
(
"Using readlines()"
)
with
open
(
"myfile.txt"
) as fp:
Lines
=
fp.readlines()
for
line
in
Lines:
count
+
=
1
print
(
"Line{}: {}"
.
format
(count, line.strip()))
count
=
0
div div
print
(
"\nUsing readline()"
)
iv
with
open
(
"myfile.txt"
) as fp:
while
True
:
count
+
=
1
line
=
fp.readline()
if
not
line:
break
print
(
"Line{}: {}"
.
format
(count, line.strip()))
count
=
0
print
(
"\nUsing for loop"
)
iv
with
open
(
"myfile.txt"
) as fp:
for
line
in
fp:
count
+
=
1
print
(
"Line{}: {}"
.
format
(count, line.strip()))
出力します。
Using readlines()Line1: GeeksLine2: forLine3: GeeksUsing readline()Line1: GeeksLine2: forLine3: GeeksUsing for loopLine1: GeeksLine2: forLine3: Geeks