Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Python・ファイル操作】~日本語のテキスト操作~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210405111435p:plain

おはようございます!Shotaです。今日も早速、Pythonに関する記事を書いていきます。

今日は日本語のテキストファイルの操作方法について解説していきます。

 

【目次】

 

ファイル操作における一番の欠点

openやreadによるテキストファイルの読み込み処理では簡単にテキストを読み込めますが、実は大きな欠点があります。それは、日本語を読み込めないことです。テキストファイルになんか適当に日本語を書いてみて下さい。そして、ファイル操作のコードを実行してみると以下のような例外が出力してしまいます。

 

▼実行するコード

with open('sample.txt', 'r') as f:
    for line in f:
        print(line)

 

▼実行結果

Traceback (most recent call last):
  File "sample.py", line 2, in <module>
    for line in f:
UnicodeDecodeError: 'cp932' codec can't decode byte 0x86 in position 11: illegal multibyte sequence

 

 「UnicodeDecodeError」が発生しています。これは、ユニコードのデータをデコード(元の状態に戻すこと)できなかったことを示しています。

 openで取得されるファイルオブジェクトは英数字と一部の記号を扱う「ASCIIコード」しか利用できません。日本語の場合、「shift-jis」というコードなら読み込めますが、コードがそれに指定されていないので読み込めません。

 

日本語のテキストファイルを操作する方法

日本語のテキストファイルを読み込む際には「codecs」 を利用します。これは「モジュール」と呼ばれるもので、テキストエンコーディングに関する処理をひとまとめにしたものです。(codecsの場合)

 

import文

codecモジュールを利用する際には、まずファイルの冒頭に以下の文を用意しないといけません。「import」という予約語を使って。モジュールをロードして使えるようにします。

 

import codecs

 

これまでに使ってきた関数の多くは、組み込みと呼ばれるものです。使用頻度が高いので「import」なしでいつでも呼び出すことができます。 「import codecs」と書くことで、codecsモジュールを利用できるようになります。このモジュールにある関数を利用して、ファイルオブジェクトを利用します。

 

open関数

codecsにも、ファイルを開くopenメソッドが利用されています。以下のように利用します。

 

codecs.open(ファイルパス,mode=モード,encode=エンコード)

 

第一引数・・・アクセスするファイルパスを文字列で指定します。

第二引数・・・アクセスモードを示す文字列を指定します。

この二つは、今までのopen関数と全く同じです。

第三引数・・・エンコード名を指定できます。文字列で種類を指定することで、日本語などのテキストを読み込むことができます。

 

日本語のテキストを読み込む

以下のようなコードを実行してみて、日本語を表示させましょう。

 

import codecs

with codecs.open('sample.txt', 'r', 'utf-8') as f:
    x = 1
    for line in f:
        print(f'{x}: {line.strip()}')
        x += 1

 

これを実行してみると、日本語のテキストも問題なく読み込まれ、コンソールに出力されることが分かるでしょう。ここでは、以下のようにしてファイルを開いています。

 

with codecs.open('sample.txt', 'r', 'utf-8') as f:

 

withが使える点もopen関数と全く同じです。エンコード名には、'utf-8'を指定しています。日本語のテキストファイルを読み込む際にはこのように指定します。

後は同様に、forで一行ずつテキストを取り出してprintするだけです。forを使っていますが、readなどの利用も基本的には同じです。

 

まとめ

【本日のまとめ】

  • 通常のテキスト操作では日本語のテキストファイルを処理できない。その際には「codecs」モジュールを利用する
  • codecsモジュールのopen関数を使えば、日本語のテキストファイルすらも読み込める

 

本ブログでは、こんな感じでPythonにまつわる情報や基本的な知識、Pythonの操作方法やニュースをたくさん紹介していきます。毎週日曜日に、普段とは趣向を変えて有名な自己啓発本・ビジネス書を要約・考察するブログを書いていきます。

この記事がいいと思った人はSNSにシェアしてくれると非常に嬉しいです!

明日は日曜日なので、本の要約・解説をしていきます。明日紹介する本は『FIRE 最速で経済的自由を達成する方法』です。

今日も最後まで読んでくださりありがとうございました!

 

【参考図書】

gihyo.jp