【Python入門】テキストファイルの読み書き方法|open関数・with文の使い方をやさしく解説

Python

Pythonでテキストファイル(.txt)を読み込んだり、内容を書き込んだりする方法は、プログラミングの基本操作の一つです。

本記事では、open()関数を使った読み込み・書き込み・追記の方法から、with文による安全なファイル操作までを初心者向けにわかりやすく解説します。

この記事の対象

  • 「txt」データの基本的な操作方法を知りたい方
  • 「txt」データの読み込み方法を知りたい方
  • 「txt」データへの書き込み方法を知りたい方
スポンサーリンク
スポンサーリンク

読み込み方法

「txt」データを読み込みにはopen()メソッドを用います。このとき、開きたいファイルの文字エンコーディングを指定する必要があるので注意が必要です。

テキストファイルを読み込む方法

ファイルを読み込むには、open()関数を使い、「読み込みモード(r)」でファイルを開きます。また、日本語を含む場合は文字コード(encoding)を指定するのが安全です。

以下のプログラムは予め「fib.txt」ファイルを生成しておき、そのファイルの中に書かれている数列を読み込んで、表示させている内容となっています。

「fib.txt」の内容

サンプルコード

open_file = open("fib.txt",encoding = "utf-8")#1---encodingの指定に注意
out_file = open_file.read()
open_file.close()
print("以下はフィボナッチ数です。\n",out_file)

ポイント

  • open("ファイル名", encoding="文字コード")
  • 一般的な文字コードは "utf-8"。WindowsのShift_JIS環境では "sjis" を指定することもあります。
  • read()はファイル全体を一度に読み込みます。

結果

#1
#1
#2
#3
#5
#8
#13
#21
#34
#55
#89
#144
#233
#377
#610
#987
#1597
#2584
#4181

書き込み方法

「txt」データの書き込みを行う場合は、open()メソッド内で「モード」を指定する必要があります。モードには書き込みモード(w)、読み込みモード(r)などがあります。

「txt」データの書き込み

以下のプログラムは数列を生成して、「num.txt」として書き込む内容となっています。

open_file = open("num.txt",mode = "w",encoding = "utf-8")

for i in range(1,21):
   open_file.write(str(i)+"\n")

open_file.close()

ポイント

  • "w":上書きモード(ファイルが存在する場合は内容を消して書き込みます)
  • write()で1行ずつ出力

結果

1
2
3
4
5
6
7
8
9
~略~

既存ファイルに追記する方法(mode=”a”)

既存のテキストファイル num.txt に、1から5までの数字を追記する内容となっています。

open_file = open("num.txt",mode = "a",encoding = "utf-8")
for i in range(1, 6):
    open_file.write( "\n" + str('Add---') + str(i))

open_file.close()

「mode=”a”」追記モードでファイルを開きます。ファイルの内容は保持され、末尾に追加書き込みしています。

結果

~~~
#987
#1597
#2584
#418121
Add---1
Add---2
Add---3
Add---4
Add---5

with文を使ったファイル操作

ファイルを開く際はwith文を使うことがおすすめです。これによりファイルを開いた後、処理が終わると自動的に閉じられます。ファイルを閉じ忘れてリソースリークを防止することができます。

【with文】既存ファイルに追記

with文で任意の文字を追記する例です。

with open("num.txt", mode="a", encoding="utf-8") as f:
    f.write("\n追加の文字列です。\n") 

結果

~~~
#987
#1597
#2584
#4181
追加の文字列です。

【with文】複数行を一括で追記する方法

複数の行をまとめて追記したい場合は、writelines()メソッドが使えます。改行文字を各行に含める必要があります。

lines = ["1行目\n", "2行目\n", "3行目\n"]

with open("num.txt", 'a', encoding='utf-8') as f:
    f.writelines(lines)

結果

~~~
#987
#1597
#2584
#4181
1行目
2行目
3行目

open()メソッドのmode一覧

mode種類内容
w書き込みモードで開く
r読み込みモードで開く(宣言が無い場合のデフォルト)
a書き込みモードで開き、ファイルがあれば末尾に書き込み
bバイナリモード ex.)”wb”などとして使用
tテキストモード(宣言が無い場合のデフォルト)

よくある使用例(応用)

操作内容解説
zipファイル内の .txt を読み込むzipfileモジュールなどで解凍せずに読み込むことが可能
テキストから文字列を検索するread()の結果に対して .find().in で調査可能

まとめ

  • Pythonでファイルを扱うには、open()関数と適切なモード指定が必要です。
  • 書き込みは "w"、追記は "a"、読み込みは "r" を使い分けましょう。
  • with文を使えば自動的にファイルを閉じてくれるので、安全でおすすめです。

関連記事

タイトルとURLをコピーしました