【初心者向け】Pythonでファイルを読み込む簡単な方法を紹介

【初心者向け】Pythonでファイルを読み込む簡単な方法を紹介

プログラム処理やアプリケーションの開発に欠かせない「ファイルのデータ読み込み」。
普段はデスクトップ上で●●.docや●●.txt、●●.jpgをクリックすればファイルの中を確認でき、データ活用が可能。しかし、Pythonでファイルを開き、データ活用しようと思うとどうすればいいでしょうか?
今回は、データファイルの開き方から読み込み方までをご紹介させて頂きます。

目次
  1. Pythonとファイルの読み込み
  2. 読み込められるファイル
  3. 読み込む目的
  4. 読み込む方法
  5. シンプルな読み込み(テキストファイル)
  6. CSVファイルの読み込み
  7. 画像ファイルを読み込む
  8. HTMLファイルの読み込み
  9. 圧縮フォルダの読み込み
  10. 予備知識
  11. read()の書き方
  12. 読み込み量を制御する
  13. 読み込みモードについて
  14. 機械学習者、人工知能学習者の方へ
  15. まとめ

Pythonとファイルの読み込み

read-data

読み込められるファイル

Pythonで開けるファイルや読み込められるデータはたくさんあります。

  • テキストファイル
  • CSVファイル
  • 画像ファイル
  • HTMLファイル
  • 音声ファイル
  • 圧縮ファイル
  • JSONファイル
  • XMLファイル など

これを見て「で、それが何の役に立つの?」と思う方も多いでしょう。 いくつかのファイル読み込みを活かしたアプリケーション例をご紹介します。 プログラムコード内でファイルの読み込みができると自分の可能性が広がることを感じて下さい。


画像データを読み込めることで、フォルダ内の画像に一括でロゴを追加できることを体験。 python-read-sample

(( 使い方 ))

  • ① リンク先表示後、画面上部の ▶(Run)ボタン をクリック
  • ② 20秒ほど待つ
  • ③ 画面左に新しく LogoPlus フォルダができたことを確認
  • ④ 元の画像と LogoPlus 内の画像を比較し、ロゴが追加できたことを確認

https://repl.it/@takayukioshima/Python-Tech2Go-LogoCreator



テキストデータを読めることで、電話帳アプリを体験。

python-read-sample-app

(( 使い方 ))

  • ① リンク先表示後、画面上部の ▶(Run)ボタン をクリック
  • ② 画面左に表示されるメニューに従って操作

https://repl.it/@takayukioshima/Python-Tech2Go-ReadText



音声データを読み見込むることで、文字の自動書き起こしを体験。

こちらはAPIコードなどの絡みもあるため、事例紹介だけにとどまらせて頂きます。

データ参照:https://indianpythonista.wordpress.com/2017/04/10/speech-recognition-using-wit-ai/


読み込む目的

上記のサンプルプログラムを体験された方なら、なんとなくファイルを読み込めるメリットを感じていただけたと思います。 プログラムでファイルを読み込む目的は、主に下記のとおりです。

  • データの加工
  • データの収集
  • アプリケーションの開発
  • 機械学習させるため

プログラミングにとっての「ファイルの読み込み」は、「デスクトップでファイルを開く」と同じぐらい基本的で大事な操作になります。 「デスクトップのファイルを開く」も単純に開く方法から、右クリックで「応用した開き方」があるのと同じで、プログラムコード内でファイルを読み込む方法もいくつか存在。 まずはシンプルな開き方、読み込み方からご紹介していきますね。


「開く」と「読み込み」の違い

  • 【開く】単にファイル内のデータを確認、表示
  • 【読み込み】ファイル内のデータを使って、プログラム処理

ファイル内のデータを読み込んで、プログラム処理できるようになると、様々なファイルの編集作業が自動化できます。


読み込む方法

how to read file in python

それでは実際にファイルを開いて、読み込んで行く方法をご紹介していきます。

シンプルな読み込み(テキストファイル)

まずは分かりやすいファイルの開き方、読み方のコードをご紹介。 Python学習者の方は、とりあえず写経してみて下さい。

python-read()

fin=open('demo.txt')
line=fin.read()
print(line)
fin.close()

【説明】 上記の読み込みコードを日本語に訳して、解説したいと思います。

コード 日本語訳
fin=open('demo.txt') dmeo.txtファイルを開いて、fin に代入
line=fin.read() 先ほどの fin を読み込んで、lineに代入
print(line) 先ほどの line をプリントアウト(出力)
fin.close() おしまい

今回ご紹介させて頂いた読み込み方のコードは、人間にとって分かりやすいコードです。 実際にはもっとシンプルにコードを書いて、バグ予防や少データ化が可能。 read() の書き方や読み込み方など read() の詳しい情報については、後の「予備知識」をご参照下さい。 まずは read() で任意のテキストファイルを読み込んでみて、それからいろいろ試してみて下さいね。

CSVファイルの読み込み

データ統計などでよく使うCSVファイル。こちらをPythonで読み込んでみます。

python-read-csv

import csv

f = open('phone-2.csv')
csv_f = csv.reader(f)
for row in csv_f:
  print (row)

【オンライン上でCSVの読み込みを体験してみる】 https://repl.it/@takayukioshima/Pyhton-Read-CSV-Sample

【説明】

コード 日本語訳
import csv PythonのCSV機能を取り込み
f = open('phone-2.csv') phone-2.csvというCSVファイルを開いて、f に代入
csv_f = csv.reader(f) 先ほど登場した f を csv 形式で読み込み、 csv_f に代入
for row in csv_f: 先ほどの csv_f の行を順番に読み込み
print (row) 順番に読み込んでいく 行 を出力

CSVファイルの読み込みの場合は、read() ではなく reader() を使います。 尚、先ほど紹介したテキストの読み込みでもCSVファイルを読み込むことは可能です。 ただし、データフォーマットが異なりますので、一般的には reader() で処理すると覚えておきましょう。

画像ファイルを読み込む

Pyhtonには標準のグラフィカルツールが少ししかないため、一般的にはPillow(PIL)やImageMagick、GUIなどのライブラリが使用されます。

Pythonで使われる画像処理系のライブラリ

  • Pillow
  • ImageMagic
  • GUI
  • Qt
  • GTK+
  • WxPython
  • Kivy など

今回はこの中でも一番有名でよく使われる Pillow を例に画像を読み込んでみます。冒頭の画像にロゴを追加するプログラムの中でもPillow使っていますよ。

python-read-csv

from PIL import Image
img = Image.open("photo.jpg")
img.show()

【説明】

コード 日本語訳
from PIL import Image ライブラリPillowのImageオブジェクトをインポート
img = Image.open("photo.jpg") photo.jpgを開いて、imgに代入
img.show() 先ほどのimgを表示

画像を取り込む場合は、openの前にImageオブジェクトがついて処理。 機械学習や人工知能のプログラムでもよく画像の読み込み処理は行われますので、基本的なことは知っておきたいですね。

HTMLファイルの読み込み

Webスクレイピングなどでよく使われるHTMLファイルの読み込み。 スクレイピングができるとデータ収集の可能性が飛躍的に向上しますので、一度は体験しておきたいですね。 今回は、基本的なHTMLファイルの読み込みをご紹介。

python-read-html

import urllib.request

with urllib.request.urlopen('https://codecamp.jp') as f:
    print(f.read(1000).decode('utf-8')) 

【オンライン上でHTMLの読み込みを体験してみる】 https://repl.it/@takayukioshima/Python-Read-HTML

【説明】

コード 日本語訳
import urllib.request ライブラリurllibのrequestメソッドをインポート
with urllib.request.urlopen('https://codecamp.jp') as f: 今回はwith文を使ってライブラリurllibのrequestメソッドを使って https://codecamp.jp を開き、fに代入
print(f.read(1000).decode('utf-8')) 文字コードUTF-08でHTMLファイルを1000文字だけ読み込み、読み込み分を出力

HTMLファイルの読み込みはテキストの読み込みと違って、open機能の前にライブラリ名、メソッド名が追記されて若干見にくいですが、定形文なのであまり神経質にならなくても大丈夫です。 このHTMLファイルの読み込みと正規表現を使って、フレームワーク以上のWebスクレイピングが実行できますよ。データサイエンティストをはじめ、マーケターの方にとって参考となるファンクションと思います。

【オンライン上でHTML+正規表現を使ったスクレイピングを体験してみる】 https://repl.it/@takayukioshima/Read-HTMLRegularExpressions

圧縮フォルダの読み込み

データやファイルを処理する中で、時には圧縮フォルダ内のファイルを読み込みたい時もあるでしょう。参考までに紹介させて頂きます。

python-read-zip

import zipfile

zf = zipfile.ZipFile('zip-test.zip')
f = zf.open('zip-test/demo-en.txt')
print (f.name)
print (f.read())

【オンライン上でZipファイルの読み込みを体験してみる】 https://repl.it/@takayukioshima/ReadZip

【説明】

コード 日本語訳
import zipfile ライブラリzipfileをインポート
zf = zipfile.ZipFile('zip-test.zip') ライブラリzipfileのZipFileメソッドを使って zip-test.zipを展開、そしてzfに代入
f = zf.open('zip-test/demo-en.txt') 先ほどのzf内のdemo-en.txtファイルを開いて、fに代入
print (f.name) ファイル名を出力
print (f.read()) fを読み込み、出力

プログラムを実行してみると分かるのですが、圧縮フォルダを別途展開することなくテキストファイルを開いけていることがわかります。 OS上で操作するより早いですね。

予備知識

こちらでは上記でご紹介した関数read()の補足事項をご紹介させて頂きます。

read()の書き方

冒頭でご紹介したテキストファイルの読み込みコードは、ほんの一例。 参考までに他の書き方をご紹介します。 参考書やWebサイトで勉強する際の助けになると思います。

サンプル1
fin=open('demo.txt')
line=fin.read()
print(line)
fin.close()

サンプル2
fin=open('demo.txt')
print(fin.read())
fin.close()

サンプル3
with open('demo.txt') as fin:
    print (fin.read())  # インデント必要

サンプル4(no read() function)
fin=open('demo.txt')
for line in fin:
  print(line,end='')

【オンライン上で様々なread()コードを体験してみる】
https://repl.it/@takayukioshima/Python-Tech2Go-ReadText-WayWay

読み込み量を制御する

read()はファイル内の全部を読み込むため、読み込みデータが1GBなどになってくると大変。 それでいくつかの読み込み方法が存在します。

  • read()
  • readline()
  • readlines()

それぞれの違いをまとめます。

種類 出力 読み込み対象 処理スピード*
read 文字を返す 全文読み込み** 0.000259秒
readline 文字を返す 文字列毎(行毎)の読み込み 0.000735秒
readlines 文字列(段落)を返す 全文読み込み後、行毎の読み込み 0.000813秒

・処理スピードは、demo-en.txt(短文) でテスト

・read() は、通常全文読み込みですが、read()の()内に数字を入れると読み込み数を限定できます。

この3つの説明ですが、意外と奥が深く、参考書に書いてある範囲では案外しっくりこないと思います。

それで各機能がどんな風にテキストファイルを読み込んでいるか分かりやすいようなコードを書きました。

イマイチ read()、readline()、 readlines() の違いがしっくりこない方、お試し下さい。

【オンライン上で read() readline() readlines() の違いを体験してみる】 https://repl.it/@takayukioshima/read-radeline-readlines-readVolume

読み込みモードについて

read()に限らずファイルの開き方にはいくつか種類があります。

サンプル1
fin=open('demo.txt','r')

サンプル2
fin=open('demo.txt','w')
  • r 読み込みモード(デフォルト)
  • w 書き込みモード
  • a 文末追記モード
  • b ファイルをバイナリモードで開く
  • t テキストモード(デフォルト)
  • + r、w、a と組み合わせ、読み書き両方可能にするモード
  • rt 読み込みモード + テキストモード、つまりデフォルトの設定

機械学習者、人工知能学習者の方へ

機械学習や人工知能系プログラムで必要とされる「特微値」。 この特殊なデータの取り扱いには、pickleというモジュールが使われます。 pickleで特微値を読み込む場合は、read()ではなく load() が使われますね。

【サンプル】

with open("sample_weight.pkl", 'rb') as f:
    network = pickle.load(f)   ←
return network

まとめ

ちょっと長文になりましたが、要は read()、奥が深いです。 とりあえずは一通りの使い方をみて、いくつか自分でプログラムしてみることをオススメします。 「一人では理解できない」という方、オンラインの現役講師によるレッスン CodeCamp はいかがでしょうか?

オシママサラ
ライター
オシママサラ

関連記事