2009年2月14日土曜日

CSVファイルの読み書き(2)

標準CSVモジュール を使った、CSV ファイルの読み書き(その2)。 以前の記事を書いた時は、標準の CSV モジュールの使い方が、よく理解できていませんでした。今回は、標準の CSV モジュールを使った ファイル IOです。 

CSV ファイルの数値データを list にします。以降のプログラムで
 List[0][0]
といった形でデータを呼び、処理が出来るようにします。
  1. CSV モジュールのインポート
  2. 文字列データを数値(float)に変換する関数を準備。リスト、サンプルデータの初期化。
  3. サンプルデータを、sample.csv というファイルに書き込みます。FW0。
  4. sample.csv を開きます。FR0。文字列データを datastr のリストに、数値化したデータを datanum のリストに保存します。
  5. 読み出したデータのチェック。
  6. 変数 row に残っている文字列のリスト を、1 行づつ 4 回書き込みます。FW1。
  7. datastr の文字列のリスト を ファイルに書き込みます。FW2。
  8. datanum の数値のリスト をファイルに書き込みます。FW3。
2.のところで
  def s2f(x): return float(x)
と関数を定義しているのは、
4.で文字列のリストを数値化する
datanum.append(map(s2f,row))
map()
を利用するには、処理が関数でないといけないからです。





## $Id$
## win32
## Python2.5
## csv file io (for numeric data)

import csv

def s2f(x): return float(x)
datastr = []
datanum = []
datasample = [[1.0,2.0],[3.0,4.0]]

fw0 = open('sample.csv','wb')
writer0 = csv.writer(fw0)
writer0.writerows(datasample)
fw0.close()

fr0 = open('sample.csv', 'rb')
reader0 = csv.reader(fr0)
for row in reader0:
datastr.append(row)
datanum.append(map(s2f,row))
fr0.close()

print (reader0.line_num)
r = 1
c = 1
print ('string data [',r,'][',c,'] = ',datastr[r][c])
print ('numeric data [',r,'][',c,'] = ',datanum[r][c])

print(row) # data for row write test, form last row
fw1 = open('csvout1.csv','wb')
writer1 = csv.writer(fw1)
writer1.writerow(row)
writer1.writerow(row)
writer1.writerow(row)
writer1.writerow(row)
fw1.close()

fw2 = open('csvout2.csv','wb')
writer2 = csv.writer(fw2)
writer2.writerows(datanum)
fw2.close()

fw3 = open('csvout3.csv','wb')
writer3 = csv.writer(fw3)
writer3.writerows(datastr)
fw3.close()



0 件のコメント: