本記事では以下の内容を解説しています.
- テキストファイルをPythonで読み込みリスト化する
- 余分なスペースや改行,重複を削除して読み込む
- リスト型のデータをテキストファイルに追記する
テキストファイルをPythonで読み込みリスト化する
使用するテキストファイルはsample.txt
です.
このファイルを読み込んでリスト化していきます.
(説明のために本来は不要な改行やスペース,重複を入れています)
sample.txt
の内容
えび かに うに 文鳥 かに
文字列をリストで取得
with
文とリスト内包表記を使用して以下のように書くと,リストで文字列を取得できます.
with open('./sample.txt', mode='r', encoding='utf-8') as f:
txt = [word.strip() for word in f if word != '\n']
txt
['えび', 'かに', 'うに', '文鳥', 'かに']
解説
open()
の第一引数でテキストファイルのパス1,第二引数で読み込み専用モード2, 第三引数でencodingを指定しています.
2行目:for
文でテキストファイルの内容を順に取得します.
この際にif word != '\n'
で改行だけの行を除くようにしています.
取り出したword
をリストに追加する際にstrip()
メソッドで文字列の前後の余計な空白・改行コードを除去しています.
参考
strip()
メソッドを使用しないと以下のような結果になります.
全角スペースコードの\u3000
や改行コード\n
が入り込んでいます.
['えび\n', 'かに\n', '\u3000うに\n', '文鳥\u3000\n', 'かに']
重複を削除したリストを取得
上記で取得したテキストは「かに」が重複しています.
重複を落としたい場合はset()
を使用して以下のようにします.
with open('./sample.txt', encoding='utf-8') as f:
txt = set([word.strip() for word in f if word != '\n'])
txt = list(txt)
txt
['えび', '文鳥', 'かに', 'うに']
注意
set型は順序が保証されないので,リストの順番は一定ではありません.
リストの順番を保持したい場合は次項を参照.
重複削除+順序を保持したリストを取得
sorted()
メソッドでリストのindexをキーとして並び替えると順番が保持されます.
# 順序を保持したい場合
with open('./sample.txt', encoding='utf-8') as f:
txt_key = [word.strip() for word in f if word != '\n']
txt = sorted(set(txt_key), key=txt_key.index)
txt
['えび', 'かに', 'うに', '文鳥']
リスト型のデータをテキストファイルに追記する
ここではすでにリスト型で存在するデータをsample.txt
に追記する方法を見てみましょう.
変数add_list
のデータが今回追加するデータです.
add_list = ['カラス', 'スズメ']
first_loop = True
# mode='a'は既存ファイルへの追記を指定
with open('./sample.txt', mode='a', encoding='utf-8') as f:
for i in add_list:
if first_loop:
f.write('\n' + i + '\n') # 1回目だけ改行を前に入れる
first_loop = False
else:
f.write(i + '\n') # 2回目以降
sample.txt
の内容
えび かに うに 文鳥 かに カラス スズメ
解説
with
文を使用しmode = 'a'
としてファイルを開きます.
これによって既存ファイルへの追記ができます.
追加したいリストの文字列をfor
文で取り出し,1回目のループ時だけ前後に改行を入れた状態でファイルへ書き込みます(f.write('\n' + i + '\n')
部分) 2回目以降は文字列の後ろ側に改行を入れます.
上記の処理によって「かに」の下に「カラス,スズメ」が追加されます.
参考
単純に書き込むとテキストの一番後ろから追記されるので以下のような結果となります.
えび かに うに 文鳥 かにカラススズメ
ひとこと
テキストを様々な形で利用できると幅が広がりますね.
リストやset
はよく使うのでしっかりと押さえておきたいです.