ミケガモのブログ

プログラミング言語「Python」のメモ

数値データのファイルを行列として読み込む

np.loadtxt

ファイル読み込みには様々な流儀があるが、一番使いやすいのはnumpyのloadtxtだと思う。

 import numpy as np
 data1 = np.loadtxt("sample.dat", skiprows=1, unpack=False) #普通のファイルの場合
 data2 = np.loadtxt("sample.csv",delimiter=",", skiprows=1, unpack=False)  #CSVファイルの場合
  • スペースで区切られていればdelimiter指定なしでも読み込んでくれる。
  • unpack = True にすると、列ごとに1次元配列を作ってくれる。その場合、左辺の変数を列数分だけ用意する。
csvモジュール

文字列を含む行列を読み込むときは、読み込むファイルをcsv形式にしてcsvモジュールを使うと良い。リストを用意し、.appendで行を追加していく。

import csv
list = []
with open('sample.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        list.append(row)

行列をファイルに書き込む

np.savetxt

numpyを使っている場合、対となるsavetxtでファイルに保存できる。

import numpy as np
np.loadtxt("sample.dat", data1) #普通のファイルの場合
np.loadtxt("sample.csv", data2, delimiter=",")  #CSVファイルに書き込む
  • header/footerオプションで、ファイルの先頭行/最終行にコメントを挿入可能。
普通に書き込み

文字列のリストを書き込むときは、普通にwrite文をforループで回すのが無難だろう。enumerate関数は、リストのインデックスと要素を同時に取得できる便利な関数である。

with open(output, mode='w') as f:
    for (n, string) in enumerate(str_list):
         f.write(n + "\t")
         f.write(string)
         f.write(\n)

この場合、以下のようなファイル出力になる。

0  str0
1  str1
2  str2
...