- 更新日: 2018年06月13日
- 公開日: 2018年05月29日
【初心者向け】Pythonでファイルを読み込む簡単な方法を紹介
プログラム処理やアプリケーションの開発に欠かせない「ファイルのデータ読み込み」。
普段はデスクトップ上で●●.docや●●.txt、●●.jpgをクリックすればファイルの中を確認でき、データ活用が可能。しかし、Pythonでファイルを開き、データ活用しようと思うとどうすればいいでしょうか?
今回は、データファイルの開き方から読み込み方までをご紹介させて頂きます。
Pythonとファイルの読み込み
読み込められるファイル
Pythonで開けるファイルや読み込められるデータはたくさんあります。
- テキストファイル
- CSVファイル
- 画像ファイル
- HTMLファイル
- 音声ファイル
- 圧縮ファイル
- JSONファイル
- XMLファイル など
これを見て「で、それが何の役に立つの?」と思う方も多いでしょう。 いくつかのファイル読み込みを活かしたアプリケーション例をご紹介します。 プログラムコード内でファイルの読み込みができると自分の可能性が広がることを感じて下さい。
画像データを読み込めることで、フォルダ内の画像に一括でロゴを追加できることを体験。
(( 使い方 ))
- ① リンク先表示後、画面上部の ▶(Run)ボタン をクリック
- ② 20秒ほど待つ
- ③ 画面左に新しく LogoPlus フォルダができたことを確認
- ④ 元の画像と LogoPlus 内の画像を比較し、ロゴが追加できたことを確認
https://repl.it/@takayukioshima/Python-Tech2Go-LogoCreator
テキストデータを読めることで、電話帳アプリを体験。
(( 使い方 ))
- ① リンク先表示後、画面上部の ▶(Run)ボタン をクリック
- ② 画面左に表示されるメニューに従って操作
https://repl.it/@takayukioshima/Python-Tech2Go-ReadText
音声データを読み見込むることで、文字の自動書き起こしを体験。
こちらはAPIコードなどの絡みもあるため、事例紹介だけにとどまらせて頂きます。
データ参照:https://indianpythonista.wordpress.com/2017/04/10/speech-recognition-using-wit-ai/
読み込む目的
上記のサンプルプログラムを体験された方なら、なんとなくファイルを読み込めるメリットを感じていただけたと思います。 プログラムでファイルを読み込む目的は、主に下記のとおりです。
- データの加工
- データの収集
- アプリケーションの開発
- 機械学習させるため
プログラミングにとっての「ファイルの読み込み」は、「デスクトップでファイルを開く」と同じぐらい基本的で大事な操作になります。 「デスクトップのファイルを開く」も単純に開く方法から、右クリックで「応用した開き方」があるのと同じで、プログラムコード内でファイルを読み込む方法もいくつか存在。 まずはシンプルな開き方、読み込み方からご紹介していきますね。
「開く」と「読み込み」の違い
- 【開く】単にファイル内のデータを確認、表示
- 【読み込み】ファイル内のデータを使って、プログラム処理
ファイル内のデータを読み込んで、プログラム処理できるようになると、様々なファイルの編集作業が自動化できます。
読み込む方法
それでは実際にファイルを開いて、読み込んで行く方法をご紹介していきます。
シンプルな読み込み(テキストファイル)
まずは分かりやすいファイルの開き方、読み方のコードをご紹介。 Python学習者の方は、とりあえず写経してみて下さい。
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で読み込んでみます。
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使っていますよ。
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ファイルの読み込みをご紹介。
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
圧縮フォルダの読み込み
データやファイルを処理する中で、時には圧縮フォルダ内のファイルを読み込みたい時もあるでしょう。参考までに紹介させて頂きます。
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
\AIエンジニアに必要なスキルが身に付く/
まとめ
ちょっと長文になりましたが、要は read()、奥が深いです。 とりあえずは一通りの使い方をみて、いくつか自分でプログラムしてみることをオススメします。 「一人では理解できない」という方、オンラインの現役講師によるレッスン CodeCamp はいかがでしょうか?
- この記事を書いた人
- オシママサラ