はじめに
この記事では、Pythonでテキストファイルを読み込む方法について記す
青空文庫からダウンロードしたテキストを使用する
使用するテキストの情報
底本:「人間失格」新潮文庫、新潮社
1952(昭和27)年10月30日発行
1985(昭和60)年1月30日100刷改版
初出:「展望」筑摩書房
1948年(昭和23年)6〜8月号
入力:細渕真弓
校正:八巻美惠
1999年1月1日公開
2011年1月9日修正
青空文庫作成ファイル:
このファイルは、インターネットの図書館、青空文庫(http://www.aozora.gr.jp/)で作られました。入力、校正、制作にあたったのは、ボランティアの皆さんです。
「図書カード:人間失格」 https://www.aozora.gr.jp/cards/000035/card301.html (最終閲覧日2024/11/25)
テキストファイルの読み込み
ファイルオープン〜読み込み
読み込みたいテキストファイルをpythonファイルと同じディレクトリに置いておく(今回のファイル名は’ningen_shikkaku.txt’)
open()
ファイルを開く
with文を用いることで、ファイルを閉じる必要がなくなる(withブロックが終了したときに自動で閉じてくれる!)
fileにファイルパス、modeにモードを指定する
様々なモードが存在するが、一番単純なものだと
読み込みモード:’r’(これがデフォルト)
書き込みモード:’w’
readlines()メソッド
ファイルを1行ごとに分割したリストとして読み込む
もし、ファイル全体を文字列として読み込みたければ、readメソッドを用いる
以上を踏まえるとコードは以下の通り
filepath = 'ningen_shikkaku.txt'
with open(file=filepath, mode='r') as f:
textlist = f.readlines()
print(textlist[:10])
ソースコードでは、スライスを利用してリストの最初の部分だけを表示するようにしている
文字コードの違いによるエラー
以上のコードを実行すると、以下のようなエラーが発生した
実行結果
Traceback (most recent call last):
File "(省略)/readfile.py", line 4, in <module>
textlist = f.readlines()
^^^^^^^^^^^^^
File "<frozen codecs>", line 322, in decode
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x90 in position 0: invalid start byte
分かったこと
- デフォルトではutf-8を読み込むようになっているらしい
- 今回使用するテキストファイルはutf-8形式ではないらしい
文字コードの指定
ファイルを開く際にエンコード形式を指定してやる必要がある
今回はShift-JISが正解
修正したコードは以下
filepath = 'ningen_shikkaku.txt'
with open(file=filepath, mode='r', encoding='shift_jis') as f:
textlist = f.readlines()
print(textlist[:10])
実行結果
['人間失格\n', '太宰治\n', '\n', '-------------------------------------------------------\n', '【テキスト中に現れる記号について】\n', '\n', '《》:ルビ\n', '(例)従姉妹《いとこ》\n', '\n', '|:ルビの付く文字列の始まりを特定する記号\n']
もとのテキストファイルの先頭にある、タイトル、作者名、記号の説明部分が表示された
リストに格納できていることも確認できる
また、文の末尾には改行文字’\n’がついている
参考 ’ningen_shikkaku.txt’の先頭部分
人間失格
太宰治
-------------------------------------------------------
【テキスト中に現れる記号について】
《》:ルビ
(例)従姉妹《いとこ》
|:ルビの付く文字列の始まりを特定する記号
(例)昔|気質《かたぎ》
[#]:入力者注 主に外字の説明や、傍点の位置の指定
(例)[#3字下げ]はしがき[#「はしがき」は大見出し]
-------------------------------------------------------
おわりに
ダウンロードしたテキストにはルビや注のための記号が入っている
今後はこれの除去を行う予定
コメントを残す