2023/09/26 (火) start 2023/09/27 (水) done

Python テキストファイル処理

ここでのテキストファイルはWindowsのメモ帳での拡張子ドットtxtを持ったものを言う。今、JP_words.txtと保存したテキストの内容 は次の通りである。しかし、注意することがある。僕はidleを使用しているが、Pythonファイルがあるディレクトリ(フォルダーの別称)を指定して開いている。そのディレクトリが存在する場所に保存しておいた方が楽である。その場所以外[下層を除く]で保存するなら絶対パスを指定する必要がある。絶対に対して相対パスがある。
この事実は何もPython特有のことではなく、僕自身が作成しているホームページで扱うHTML言語のファイル指定でも言えることである。日頃気にしていない人にはチンプンカンプンかもしれない。長くなるかもしれないが、僕の理解する範囲でWindowsの場合で説明しておく。
Windowsのエクスプローラーを開くとファイルの道筋みたいなものが中ほど上の方にあるはずだ。それがファイルパスである。または、フォルダーやファイルを右クリックしてプロパティを選択するとファイルの場所が表示される。それもパスである。
そして理解するために、予備知識として、/filename or directorynameは一つ下の階層を示し、一つ上の階層は../filenameあるいはfoldername(directoryname)と記載し、一つ上の階層にあるファイルやフォルダーを示す。二つ上は../../となる。この指定には必ず基準となるファイルやフォルダーがなければ意味をなさない。そして、その基準となるファイルやフォルダーはケースバイケースで変わるわけだから、これを相対パスという。相対パスを例示説明しよう。フォルダー名My_pythonを基準として同じ階層にテキストファイルtest.txtがあるなら、そのままfilename = 'test.txt'となる。次にフォルダー名Prc_pythonの中にtest.txtがあり、My_pythonの一つ下の階層にPrc_pythonがあったなら、filename = 'Prc_python/test.txt'となる。Pythonがファイルを探すとき基準点の階層を最初に探し、次に下の階層を探すので、基準点は分っているから、filenameの指定にMy_pythonを入れる必要はない。もしPrc_pythonが一つ上の階層にあるなら、絶対パス指定(下の説明参照)となる。Windowsはパス指定にバックスラッシュ(日本語OSでは\)で表示させるが、Pythonのコード内ではスラッシュ / で宜しい。
絶対パスは文字通り指定したいファイルの場所を誤りなく記載することである。僕のPCにおいて、仮にPrc_pythonフォルダ内にtest.txtがあって、それがデスクトップにあったとしら、filename = '/Users/***/Desktop/Prc_python/test.txt'とすることになる。絶対パスはこのように冗長になるので、かように変数で受けるようにした方が良い。***はアルファベット名のユーザー名がくる。話を元に戻そう。
ファイル名:JP_words.txt
おこし
につけ
たきび
〇▲■🔷

さて、ここで図形の部分には何が入るかだ。図形の個数と文字が一致するかは分からない。適切な言葉が欲しい。そこで、このテキストファイルをプログラムで処理して横並びにしよう。分ってしまった人には悪いがやってみよう。

filename = 'JP_words.txt'

with open(filename, encoding="utf-8") as file_object:
    lines = file_object.readlines()

words_string = ''

for line in lines:
    words_string += line.rstirp()

print(words_string)

#実行結果

おこしにつけたきび〇▲■🔷

横文字にしたら分り易いと思うが。そう桃太郎の歌詩の一部である。ゆえに'だんご'が正解である。40年ほど前の某有名幼稚園の入園問題だったらしい。住友金属鉱山時代の同期である慶応ボーイが俺にだした問題だ。幼稚園恐るべしかな。
filename変数にファイル名を代入しているが、open('JP_words.txt')と直接引数として入力しても構わない。引数でencoding="utf-8"とあるが、僕のidleがUTF-8で保存したメモ帳を読み込めず、そのコードを引数に入れることで読み込み可能となっている。文字コードの変換でこういった問題は生じ得る。これはググって調べたものである。withはこれをつけることで、プログラムを閉じた後にメモリーを自動で開放してくれる。file_objectとある。僕にはうまく説明できないが、クラスでインスタンス化と述べたが、インスタンス化することがオブジェクトを作ることになる。テキストファイルの属性やそういった性質を持つ物との軽い解釈しかできない。linesはfile_object.readlines()で一行ごとに読み込んだ文字列のリストを格納したものである。words_string=''は初期化したもの。forループで読み込んだ行の最右にある改行を削除して+=つまり文字列をつなぎ合わせたものをwords_stringに読み込ませている。それが実行結果である。
ここではPythonによるテキストファイル処理のほんの一例を説明した。Pythonでテキストファイルに書き込みや追記を行うことも可能である。テキストの特性、例えばよく使用される言葉やあるいは文字列として格納された数字を調べる等々可能だろう。そういったことも含めて後日投稿してゆこうと考えている。
▲ トップへ戻る


戻る
カテゴリー