テキストファイルの読み書き – 【Pythonプログラミング2 ~応用編~】

PROGRAMMING

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

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, in 
    f = 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, in 
    data = 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ファイルの読み書き>
タイトルとURLをコピーしました