【これでマスター!】Pythonでファイルを読み込む方法を解説

プログラミングにおいて、あらゆる形式のファイルの内容を読み込む処理はよく使われます。

ファイルを読み込む方法の基本が知りたい
CSVファイルを読み込む方法が知りたい
日本語を含むファイルを読み込む方法が知りたい
バイナリファイルの読み込む方法が知りたい

そこで今回は、Pythonにおける「ファイルの読み込み」に関して、やさしく解説していきたいと思います。

  • 【基礎】txtファイルの読み込み方法
  • 【基礎】with文を活用する方法
  • 【基礎】csvファイルの読み込み方法
  • 【発展】日本語を含むファイルの場合
  • 【発展】バイナリの読み込み方法
  • 【発展】リストや辞書に書き込み方法

この記事を読めば、ファイルを読み込む方法について一通り理解することができます。

ぜひご覧ください!

※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。

txtファイルの読み込み

まずは基本的なファイルの読み込み方法をご紹介したいと思います。

ファイルと言っても、様々な形態のファイルが存在します。まずは、一番一般的で基本であるtxtファイルを読み込んでみましょう。

これから紹介するサンプルコードでは以下の「start.txt」を使用しています。

Hi everyone!
This is Samurai Engineer blog.
Let's enjoy programming!

読み込む際に使用するメソッドは主にreadreadlines です。

ではまずは、readメソッドを使用したサンプルコードをご覧ください。

myfile = open("start.txt")
data = myfile.read()
myfile.close()
print(data)

出力結果は以下の通りです。

Hi everyone!
This is Samurai Engineer blog.
Let's enjoy programming!

上のコードでは、

  • open関数でstart.txtを開く(ファイルオブジェクトを返す)
  • readメソッドでデータを読み込み
  • data変数にその内容を格納


の処理をしています。

読み込みが完了したmyfileはもう必要ないので、close関数で閉じておきます。出力結果を見てわかるように、readメソッドはファイル全体を文字列型として読み込みます。

反対に、readlinesメソッドはファイルを一行ごとに読み込み、各行がリスト型オブジェクトの要素を構成しています。

以下のコードをご覧ください。

myfile = open("start.txt")
data = myfile.readlines()
myfile.close()
print(data)

出力結果は以下の通りです。

['Hi everyone!\n', 'This is Samurai Engineer blog.\n', "Let's enjoy programming!"]

上のコードは、先ほどのコードとさほど変わりません。

readメソッドがreadlinesメソッドに変わったくらいですが、出力結果が文字列ではなく、リスト型オブジェクトであることがわかります。各行を抜き取りたい場合は、いつものようにforループを使用しリスト型オブジェクトの要素を取り出しましょう。

また、その際にrstripメソッドを使用して改行「\n」を取り除くことも出来ます。forループについての基本的な解説は以下のリンクを参照してください。

【Python入門】初心者必見!forループの使い方とその応用
更新日 : 2018年10月30日

with文を活用する方法

これまで紹介してきたファイルの読み込み方法は、

  • open関数でファイルを開き
  • readメソッドやreadlinesメソッドで読み込み
  • そしてclose関数で終了


という形をとっていました。

しかし、with構文を使うとこれらがとっても簡潔化されて便利になります。

以下のサンプルコードをご覧ください。

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

fはファイルオブジェクトです。

ファイルオブジェクトをそのままfor文で使うと、一行ずつ文字列として取り出してくれます。

出力結果は以下の通りです。

Hi everyone!

This is Samurai Engineer blog.

Let's enjoy programming!

上のコードでは、with文を使用してファイルの読み込みを行いました。

  • withブロック内はファイルが開いている状態
  • ブロック外はファイルが閉じられている状態


になります。

その為、close関数を使用する必要が無くなりました。ちなみに、start.txtの横にある「r」という文字は「読み取り専用モード指定」です。

単純に、start.txtは「新たなデータを書き込むためではなく、読み込むために開いています」という意味です。

csvファイルの読み込み

txtファイルの他にも、csvファイルなどもよく使用するテキストファイルの種類です。csvファイルはカンマで区切られたデータのことです。

今回は、csvファイルからデータを1つずつ読み取る方法をご紹介したいと思います。これから紹介するサンプルコードでは、以下の「start.csv」を使用しています。

Japan,Tokyo,Osaka,Sapporo
Italy,Roma,Firenze,Venice
UK,London,York,Wales

以下のサンプルコードをご覧ください。

with open('start.csv', 'r') as f:
    for line in f:
        elements = line.split(',') 
        for element in elements:
            print(element)

出力結果は以下の通りです。

Japan
Tokyo
Osaka
Sapporo

Italy
Roma
Firenze
Venice

UK
London
York
Wales

上のコードでは、csvファイルのデータを一行ずつ読み込んでいます。

splitメソッドの引数に「','」(カンマ)を指定しているのは、各行の要素(Japan, Tokyo, Osaka, Sapporo)がカンマで区切られているためです。

splitメソッドの戻り値はリスト型オブジェクトなので、各データはforループを使って抽出されています。

日本語を含むファイルの読み込み

日本語の文字列が含まれるファイルは、読み込み時に文字化けする場合があります。それを回避するためには、このようにopen関数の引数に文字コードを指定する必要があります。

encoding=’UTF-8’

このencodingに読み込みたいファイルと同じものを指定します。

読み取るファイルの文字コードとopen関数で指定する文字コードが異なれば、UnicodeDecodeErrorエラーが発生するので、十分注意しましょう。

日本語で構成されているcsvファイルを読み込んでみましょう。

使用するcsvファイルは以下のものです。

日本,東京,大阪,札幌
イタリア,ローマ,フィレンツェ,ヴェネツィア
イギリス,ロンドン,ヨーク,ウェールズ

以下のサンプルコードをご覧ください。

with open('japan.csv', encoding='UTF-8') as f: 
        for line in f:
            elements = line.split(',')
            for element in elements:
                print(element)

出力結果は以下の通りです。

日本
東京
大阪
札幌

イタリア
ローマ
フィレンツェ
ヴェネツィア

イギリス
ロンドン
ヨーク
ウェールズ

バイナリファイルの読み込み

これまでご紹介してきたのは全てテキストファイルを読み込む方法です。

しかし、バイナリ(2進数)ファイルを読み込みたい場合はどうすれば良いのでしょうか。以下のコードをご覧ください。

with open("test.bin","rb") as f:
    f.seek(0)

上のコードでは、test.binというバイナリファイル「rb」モードで開いています。

これは「バイナリファイルを読み取り専用で開きます」という意味です。seekメソッドは指定した場所からデータを読み始めることが出来るとても便利なメソッドなので覚えておきましょう。

リストや辞書に書き込む

csvファイルを読み込んだ後、リストや辞書型オブジェクトなどに書き込む、ということも覚えておくと便利です。

Pythonにはcsvモジュールといったものが用意されています。これを使用すると簡単な記述でリストや辞書に抽出したデータを格納することができます。

csvモジュールを使用するには、まずはインポートをする必要があります。csvモジュールをインポートするには以下のコマンドを使用してください。

import csv

ではまずは、リスト型オブジェクトにデータを格納してみましょう。

これからご紹介するコードでは、先ほどと同じように「start.csv」を使用します。

以下のサンプルコードをご覧ください。

with open('start.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

出力結果は以下の通りです。

['Japan', ' Tokyo', ' Osaka', ' Sapporo']
['Italy', ' Roma', ' Firenze', ' Venice']
['UK', ' London', ' York', ' Wales']

上のコードでは、csvモジュールのreaderメソッドを使用しています。csvファイルの各行がリストになっており、その行に属するデータたちがリストの要素となっています。

では、今度はcsvファイルのデータを辞書に書き込んでみましょう。使用するcsvファイルは以下のものです。

Country_name,Capital_city,Other
Japan,Tokyo,Osaka
USA,Washington,NewYork

では、以下のコードをご覧ください。

with open('dict.csv', 'r') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)

出力結果は以下の通りです。

OrderedDict([('Country_name', 'Japan'), (' Capital_city', ' Tokyo'), (' Other', ' Osaka')])
OrderedDict([('Country_name', 'USA'), (' Capital_city', ' Washington'), (' Other', ' NewYork')])

上のコードでは、csvモジュールのDictReaderクラスを使用します。読み込むファイルの一行目が辞書のkeyとなり、2行目以降のデータをひとつずつ取り出し、それらを辞書のvalueとしてkeyに紐づけています。

ご覧いただけるように、一行目の一番目の要素であるCountry_nameは、きちんと二行目の一番目であるJapanや、三行目の一番目であるUSAと組み合わさっています。

まとめ

今回は、Pythonにおけるファイルの読み込み方法をまとめてご紹介しました。

txtファイルやcsvファイル、バイナリファイルなどといった様々な種類のファイルを扱えるととても便利です。ぜひ皆さんもこれらの扱い方をどんどんマスターしていってくださいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

Kotono

Kotono

イタリア在住15年目の22歳です。イタリアの大学で情報科学&応用数学を学んでいます。主にJavaScriptやPythonについての記事を書いたりしています。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説