BETA

Pythonでテキストファイルに含まれる文字の種類をリストアップ

投稿日:2019-05-28
最終更新:2019-05-28

Pythonでテキストファイルに含まれる文字の種類をリストアップ

仕事でテキストファイルに含まれる文字をリストアップする機会があったので、せっかくなのでPythonを使ってみました。
環境構築等については省きます。今回はPython 3.7環境で実行しました。

実装

まずはテキストファイルの読み込みができなくてはなりませんね。というわけで、テキストファイルのサンプルを用意します。文字コードはUTF-8です。

これは  
テキストファイルの  
サンプルです。  
これは  
テキストファイルの  
サンプルです。  

このファイルを読み込んでコンソールに出力してみます。ディレクトリ構成は以下の通り。

root/  
 ├ sample.txt  
 └ analyze.py  

ではこのanalyze.pyに書き込んでいきます。

f = open("./sample.txt", "r", 1, "utf_8")  
lines = f.readlines()  # 一行ずつ読み込む  
f.close()  

for line in lines:  
    print(line)  
$ python analyze.py  
これは  

テキストファイルの  

サンプルです。  

これは  

テキストファイルの  

サンプルです。  

できました。次にこれらを文字列から文字の配列に分割してみます。

f = open("./sample.txt", "r", 1, "utf_8")  
lines = f.readlines()  
f.close()  

result = list()  

for line in lines:  
    chars = list(line)  # 文字列を文字のリストに変換  
    result.extend(chars)  

print(result)  
$ python analyze.py  
['こ', 'れ', 'は', '\n', 'テ', 'キ', 'ス', 'ト', 'フ', 'ァ', 'イ', 'ル', 'の', '\n', 'サ', 'ン', 'プ', 'ル', 'で', 'す', '。', '\n', 'こ', 'れ', 'は', '\n', 'テ', 'キ', 'ス', 'ト', 'フ', 'ァ', 'イ', 'ル', 'の', '\n', 'サ', 'ン', 'プ', 'ル', 'で', 'す', '。', '\n']  

できました。順調ですね。重複を排除したいので、重複した要素を持たないset型を利用しましょう。

f = open("./sample.txt", "r", 1, "utf_8")  
lines = f.readlines()  
f.close()  

result = list()  

for line in lines:  
    chars = set(line)  
    result.extend(chars)  
    result = list(set(result))  

print(result)  
$ python analyze.py  
['ン', 'ル', 'こ', 'イ', 'は', 'で', 'プ', 'ス', 'れ', 'テ', '\n', 'サ', 'の', 'キ', 'ト', 'す', '。', 'ァ', 'フ']  

いいですねいいですね。これだとちょっと見づらいので、ソートをかけた後で文字列に戻してみましょうか。

f = open("./sample.txt", "r", 1, "utf_8")  
lines = f.readlines()  
f.close()  

result = list()  

for line in lines:  
    chars = set(line)  
    result.extend(chars)  
    result = list(set(result))  

result.sort()  
print(''.join(result))  
$ python analyze.py  
。こすでのはれァイキサステトフプルン  

もうこれで完成にしてもいいかもしれませんが、せっかくなのでファイルに出力してみましょう。

f = open("./sample.txt", "r", 1, "utf_8")  
lines = f.readlines()  
f.close()  

result = list()  

for line in lines:  
    chars = set(line)  
    result.extend(chars)  
    result = list(set(result))  

result.sort()  

f = open("./result.txt", "w")  
f.write(''.join(result))  
f.close()  
root/  
 ├ sample.txt  
 ├ analyze.py  
 └ result.txt  
。こすでのはれァイキサステトフプルン  

完璧ですね。これで文句はないでしょう。

ちなみに

調べながら30分ほどかけてこのコードを作ったわけですが、先輩にたった1分でサクラエディタとExcelで再現されました。ぐぬぬ。
いろんな道筋を考えられるようにするべきですね。

参考資料

Webプログラムの技術メモ他
Pythonで配列や行列の結合
note.nkmk.me

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

だらだら更新していきたい技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!