Pythonでテキストファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。
1.演習用プログラムとテキストファイルのダウンロード
演習用プログラム( practice13.py )とテキストファイル( text_file1.txt、text_file2.txt )をダウンロードします。
演習用プログラムは テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更します。
practice13.py、text_file1.txt、text_file2.txt を Python をインストールしたフォルダ(今回は C:\Python)に置きます。
2.ソースコードの表示
メモ帳を使って、演習用プログラム( practice13.py )を開きます。

practice13.py
3.テキストファイルの読み込み
最初にテキストファイルを読み込む方法を見ていきます。
① ファイル全体を読み込む
まずは、コマンドプロンプト で practice13.py を実行します。
プログラムを実行する方法は、こちらの記事『ファイルに保存されたプログラムの実行』を参照します。
以下のように表示されます。
C:\Users\kotablog>python C:\Python\practice13.py *** テキストファイルの読み込み **** text_file1.txtのファイル全体を読み込みます 札幌 東京 名古屋 大阪 福岡
プログラムソースを確認します。
01 # -*- coding: utf-8 -*-
02 """
03 演習プログラム13
04
05 テキストファイルの読み書き
06
07 """
08 import sys # sysモジュールのインポート
09
10 print("\n*** テキストファイルの読み込み ****")
11
12 # ファイル全体を読み込む
13 print("\ntext_file1.txtのファイル全体を読み込みます")
14 file_name1 = r"C:\Python\text_file1.txt" # ファイルのフルパス名
15 f = open(file_name1, 'r') # 読み込みモードでファイルを開く
16 data = f.read() # ファイル終端まで全て読み込む
17 f.close() # ファイルを閉じる
18 print(data)
19
20 #終了1
21 sys.exit()
14行目で 変数 file_name1 に text_file1.txt のフルパスファイル名をセットしています。
15行目で テキストファイルを読み込みモード( 'r' )で開いています。
16行目で テキストファイルの先頭から終端まで全て読み込んでいます。
17行目の close()メソッドで必ずファイルを閉じます。
18行目で 読み込んだ内容を表示しています。
【確認作業】開くファイルが存在しない場合を確認します。
14行目のファイル名 text_file1.txt を text_file0.txt に修正します。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
C:\Users\kotablog>C:\Python\practice13.py *** テキストファイルの読み込み **** text_file1.txtのファイル全体を読み込みます Traceback (most recent call last): File "C:\Python\practice13.py", line 15, inf = open(file_name1, 'r') # 読み込みモードでファイルを開く ^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Python\\text_file0.txt'
15行目でテキストファイルを開くときに FileNotFoundError: [Errno 2] となりました。
エラーメッセージは、『そのようなファイル、又はディレクトリはありません』です。
忘れないように
14行目のファイル名 text_file0.txt を text_file1.txt に戻します。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
② 文字エンコーディングを指定する
ソースコード #終了1 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
text_file2.txtのファイル全体を読み込みます Traceback (most recent call last): File "C:\Python\practice13.py", line 28, indata = f.read() # ファイル終端まで全て読み込む ^^^^^^^^ UnicodeDecodeError: 'cp932' codec can't decode byte 0x83 in position 19: illegal multibyte sequence
プログラムソースを確認します。
23 # 文字エンコーディングを指定する
24 print("text_file2.txtのファイル全体を読み込みます")
25 file_name2 = r"C:\Python\text_file2.txt" # ファイルのフルパス名
26 f = open(file_name2, 'r') # 読み込みモードでファイルを開く
27 #f = open(file_name2, 'r', encoding='UTF-8') # 読み込みモードでファイルを開く
28 data = f.read() # ファイル終端まで全て読み込む
29 f.close() # ファイルを閉じる
30 print(data)
31
32 #終了2
33 sys.exit()
28行目の read()メソッドでファイルを読み込むときに
UnicodeDecodeError となりました。
text_file2.txt の文字エンコーディングは、UTF-8 です
よって、26行目の open()メソッドの引数 encoding で UTF-8 を指定する必要があります。
26行目の先頭に「 # 」を入れてコメントにします。
27行目の先頭の「 # 」を削除します。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
text_file2.txtのファイル全体を読み込みます アメリカの首都:New York イギリスの首都:London イタリアの首都:Roma スペインの首都:Madrid フランスの首都:Paris
text_file2.txt の内容を表示することができました。
アメリカの首都が誤っていますが、この後で修正します。
③ with文でコーディングする
ソースコード #終了2 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
with文でコーディングする 札幌 東京 名古屋 大阪 福岡
プログラムソースを確認します。
35 # with文でコーディングする
36 print("with文でコーディングする")
37 with open(file_name1, 'r') as f: # 読み込みモードでファイルを開く
38 data = f.read() # ファイル終端まで全て読み込む
39 print(data)
40
41 #終了3
42 sys.exit()
open() で開いたファイルを、最後に close() し忘れると、ファイルが開いたままになってしまいます。
これを防ぐために、with文を使います。
④ 1行毎に読み込む
ソースコード #終了3 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
1行毎に読み込む(リストに格納) ['札幌\n', '東京\n', '名古屋\n', '大阪\n', '福岡\n']
各データの後ろに改行文字( \n )が付いています。
プログラムソースを確認します。
44 # 1行毎に読み込む
45 print("1行毎に読み込む(リストに格納)")
46 with open(file_name1, 'r') as f: # 読み込みモードでファイルを開く
47 datalist = f.readlines() # 行単位で読み込む
48 print(datalist)
49
50 #終了4
51 sys.exit()
47行目の readlines()メソッドで、テキストファイル内の1行毎にリストに格納しています。
readlines()メソッドを使うと、改行文字( \n )を含んでリストに格納されます。
データを処理するには、改行文字が無いほうが便利です。
次に、改行文字を取り除く方法を見ていきます。
⑤ 改行文字を取り除く
ソースコード #終了4 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
改行文字を取り除く ['札幌', '東京', '名古屋', '大阪', '福岡']
プログラムソースを確認します。
53 # 改行文字を取り除く
54 print("\n改行文字を取り除く")
55 with open(file_name1, 'r') as f: # 読み込みモードでファイルを開く
56 data = f.read() # ファイル終端まで全て読み込む
57 datalist = data.splitlines() # 文字列を改行で分割
58 print(datalist)
59
60 #終了5
61 sys.exit()
改行文字が入らないようにするには、
57行目の read()メソッド でファイル全体を読み込んでから、
58行目の splitlines()メソッド で改行文字で分割してリストに格納します。
4.テキストファイルの書き込み
次にテキストファイルにデータを書き込む方法を見ていきます。
① 書き込みモードでファイルに書き込む
ソースコード #終了5 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
*** テキストファイルの書き込み **** "那覇"をファイルに書き込みます text_file1.txt の内容を確認しましょう
エクスプローラから、text_file1.txt を開いて内容を確認してください。
那覇 だけになっています。
プログラムソースを確認します。
63 print("\n*** テキストファイルの書き込み ****")
64
65 # 書き込みモードでファイルに書き込む
66 print("\n\"那覇\"をファイルに書き込みます")
67 with open(file_name1, 'w') as f: # 書き込みモードでファイルを開く
68 f.write("那覇") # データを書き込む
69 print("text_file1.txt の内容を確認しましょう")
70
71 #終了6
72 sys.exit()
67行目で テキストファイルを書き込みモード( 'w' )で開いています。
68行目の write()メソッドで "那覇" を書き込んでいます。
書き込みモード( 'w' )では、対象ファイルが存在する場合、ファイルの中身が新しい文字列(今回は "那覇")で書き換えらます。
また、書き込みの処理がなくても、ファイルを開いた直後に中身が空になるので気をつけましょう。
② リストのデータをファイルに書き込む
ソースコード #終了6 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
リストのデータをファイルに書き込みます text_file1.txt の内容を確認しましょう
エクスプローラから、text_file1.txt を開いて内容を確認してください。
データが連結されて1行で書かれています。
プログラムソースを確認します。
74 # リストのデータをファイルに書き込む
75 print("\nリストのデータをファイルに書き込みます")
76 datalist = ['札幌', '東京', '名古屋', '大阪', '福岡']
77 with open(file_name1, 'w') as f: # 書き込みモードでファイルを開く
78 f.writelines(datalist) # リストのデータを書き込む
79 print("text_file1.txt の内容を確認しましょう")
80
81 #終了7
82 sys.exit()
78行目の writelines()メソッド は改行文字を入れてくれないので、リストの要素が連結されてファイルに書き込まれます。
③ リストの要素ごとに改行を入れる
ソースコード #終了7 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
リストの要素ごとに改行を入れます text_file1.txt の内容を確認しましょう
エクスプローラから、text_file1.txt を開いて内容を確認してください。
リストの要素が改行されてファイルに書き込まれています。
プログラムソースを確認します。
84 # リストの要素ごとに改行を入れる
85 print("\nリストの要素ごとに改行を入れます")
86 with open(file_name1, 'w') as f: # 書き込みモードでファイルを開く
87 f.write("\n".join(datalist)) # 改行文字でリストの要素を連結した文字列を書き込む
88 f.write("\n") # 最後の要素の後ろには改行文字を書き込む
89 print("text_file1.txt の内容を確認しましょう")
90
91 #終了8
92 sys.exit()
87行目の join()メソッド を使い、改行文字( \n )でリストの要素を連結した文字列を書き込んでいます。
88行目は、最後の要素の後ろには改行文字が付かないので、ここで改行文字だけを書き込んでいます。
④ 追記モードでファイルに書き込む
ソースコード #終了8 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
"那覇"をファイルの末尾に書き込みます text_file1.txt の内容を確認しましょう
エクスプローラから、text_file1.txt を開いて内容を確認してください。
テキストファイルの末尾に "那覇" が追加されています。
プログラムソースを確認します。
94 # 追記モードでファイルに書き込む
95 print("\n\"那覇\"をファイルの末尾に書き込みます")
96 with open(file_name1, 'a') as f: # 追記モードでファイルを開く
97 f.write("那覇" + "\n") # データを書き込む
98 print("text_file1.txt の内容を確認しましょう")
99
100 #終了9
101 sys.exit()
96行目で テキストファイルを追記モード( 'a' )で開いています。
97行目の write()メソッドで "那覇" の後ろに改行文字を付けて書き込んでいます。
⑤ 1行を書き換える
最後に、text_file2.txt で、アメリカの首都:New York となっているので、正しい首都に書き換えを行います。
ソースコード #終了9 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
1行を書き換えます text_file2.txt の内容を確認しましょう
エクスプローラから、text_file2.txt を開いて内容を確認してください。
アメリカの首都が "New York" から "Washington" に書き換わっています。
プログラムソースを確認します。
103 # 1行を書き換える
104 print("\n1行を書き換えます")
105 with open(file_name2, 'r', encoding='UTF-8') as f: # 読み込みモードでファイルを開く
106 data = f.read() # ファイル終端まで全て読み込む
107 datalist = data.splitlines() # 文字列を改行で分割
108
109 for i in range(len(datalist)): # 1行ずつ取得する
110 if "New York" in datalist[i]: # 行に "New York" が含まれる場合
111 datalist[i] = datalist[i].replace('New York', 'Washington')
112
113 with open(file_name2, 'w', encoding='UTF-8') as f: # 書き込みモードでファイルを開く
114 f.write("\n".join(datalist)) # 改行コードでリストの要素を連結した文字列を書き込む
115 f.write("\n") # 最後の要素の後ろには改行コードを書き込む
116
117 print("text_file2.txt の内容を確認しましょう")
118
119 sys.exit()
106行目で、text_file2.txt の内容を全て読み込んでいます。
107行目の splitlines()メソッド で改行文字で分割して、1行毎にリスト( datalist )に格納しています。
109行目の for文 で1行ずつ確認していきます。
もし、"New York" が行に含まれるなら(110行目)、
111行目で "New York" を "Washington" に置き換えています。
113行目で text_file2.txt を書き込みモード( 'w' )で開いています。
114行目の join()メソッド を使い、改行文字( \n )でリスト( datalist )の要素を連結した文字列を書き込んでいます。
115行目の write()メソッドで、最後の行の末尾に改行文字を付けて書き込んでいます。
<例外処理 | テキストファイルの読み書き | CSVファイルの読み書き> |