Pythonでファイルの入出力(fromfileとfromstring)

Python実験データの可視化を行う機会があったので、ファイルの入出力についてのメモです。今回の目標はバイナリ形式のファイルのデータを読み込み1次元の配列に格納することです。

※今回は数値計算ライブラリnumpyを利用しているため、あらかじめPythonのパッケージ管理用のアプリケーションであるpipなどをインストールしておき、numpyのライブラリを導入しておいてください

  • numpyのインポート
import numpy as np
  • fromfileを用いたファイル読み込み
fp = open('filename','rb')
ary = np.fromfile(fp, np.float64, -1)
fp.close()

open()関数の第1引数で開くファイルを指定できます。今回はデータフォルダと同じ階層にPythonのファイルを置いたためファイルの名前で直接指定できていますが、データへのパスを入れることも可能です。

また、今回はバイナリ形式のデータを読みため第2引数は’rb’となっています。r:read(読み込み)、b:binary(バイナリ形式のファイル)を意味しており、通常のテキスト形式のファイルを使用するときは’rb’→’r’と書き換えます。

fromfile()関数は読み込んだデータを1次元の配列にどんどん格納する関数です。引数で指定するオプションはファイルポインタと配列の要素1つ当たりのサイズと読み込む範囲です。

今回はopen()関数で読み込んだファイルのファイルポインタfpを第1引数にしています。

第2引数では配列の要素1つ当たりのサイズとしてnp.float64という型を指定しています。この型は8バイトのサイズを持つので配列の1つの要素を8バイトで確保します。Cでいうところのdouble型に相当します。

今回はファイルに書き込まれているデータが8バイトずつ出力されていたためこのデータ型を使います。int型で出力されている場合は適宜書き換えてください。ちなみに数値でバイト数を直接指定することはできないようです。

第3引数ではデータをどこまで読み込むかを指定できます。400*400のサイズの画像データなら400*400もしくは、160000と指定することですべてのデータを読み込むことができます。-1を指定すると勝手にファイルすべてを読み込み配列に格納してくれます。

今回はすべてのデータを読み込む必要があったため-1を引数に取っています。このオプションは明示しなければ自動的にファイルすべてを読み込むようです。

 

最後にfromstringを用いたファイル読み込みを紹介します。動作はfromfileを用いたものと等価です。

  • fromstringを用いたファイル読み込み
f = open('filename','rb')
str = f.read()
f.close()
ary = np.fromstring(str, 'd')

こちらは一度ファイルのデータを文字列の配列に格納し、その配列を8バイトずつ区切ることで上で紹介したプログラムと同じような1次元配列を作っています。結果は同じですが、2回配列に格納する動作があるのでこの方法は今回は却下ということで。

fromstring()関数は第1引数で文字列の配列を受け取り、第2引数で指定されたサイズごとに文字列型の配列を区切りなおして新たな配列を生成するイメージです。ちなみに’d’オプションはdouble型(8バイト)を意味しています。

今回はこんなかんじです。なかなかまとまった時間がないのでペースはゆっくりになりがちですがよろしくお願いします。

1 Comment

  1. チョロ
    2018年8月30日

    丁寧でわかりやすいです。良かったです。

    Reply

Leave a Reply to チョロ Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to top