Pythonでのファイルの入出力2(CSV)

今回はファイル入出力の続きとして、多少実用的な方向へシフトします。

データベースなどの内容へと繋がるので、CSVファイルを扱うことにします。定型を扱う文書なので、例えば顧客情報や商品情報などのデータを一括で扱うには非常に便利です。そういうデータを処理する第一歩として読み書きなどを実際に行ってみましょう。

標準ライブラリの読み込み

CSVはpython標準のライブラリで扱うことができ、プログラムの頭にそれを使うことを明記する(includeする)必要があります。

import csv

これを表記することでCSVファイルを扱うことができます。

CSVファイル読み込み

import csv

with open("inputcsv.csv") as f:
 reader = csv.reader(f)
 post = [row for row in reader]

 print(post)

テキストファイルのようにwith open構文を使うことで、同じようにファイルから読み込むことが可能です。表記例は以下のエントリから。

読み込みに使用したCSVファイルは日本郵便のサイトで配布されている、郵便番号と住所のデータを利用させていただきました。

郵便番号データダウンロード - 日本郵便
各種郵便番号データのダウンロードはこちらからどうぞ。

ただし、データ量が多いため、普通に全行読み込み・出力処理を行うことはあまり適切ではありません。処理時間やデータの可読性などに問題が出るので、有効活用したい場合は後述の読み込み方や、データ形式の選択などで取捨選択を行った方がよいでしょう。もしくは、練習のためなら大きすぎないファイルを選ぶことも重要です。

CSVファイル書き込み

こちらもファイルの書き込み同様に、ファイルを開いてCSV書き込みの関数を使います。

with open("inputcsv.csv", "w") as f:
    csv_write = csv.writer(f)
    csv_write.writerow(["A4","B5","B6"])
    csv_write.writerow([3,6,5])

ただしこの形で出力すると、出力した要素の間に空白行が入ってしまいます。

[['A4', 'B5', 'B6'], [], ['3', '6', '5'], []]

printでは1行出力するごとに改行をしていましたが、これと同じことをしています。ファイルモードのオプションに「newline=””」と指定するとこれを防ぐことができます。

with open("inputcsv.csv", "w", newline="") as f:

また、CSVは各行の終わりに改行コードを仕込むため、それと合わさって2回改行していたというわけです。csv.writerの設定に「lineterminator」という改行コードの設定もありますが、システムによって異なるものなので、対応していないものに設定してもなんらかの不具合を招く可能性があるので、newline=””で新規の行に移る場合何も入力しない、という設定のほうが適切でしょう。

行列として読み込む

上記の読み込み方では、普通のテキストファイルのように1行単位や文字数単位で読み込むことになりますが、CSVがコンマ区切りである利点を最大限使うために、二次元配列として読み込んでみましょう。

import csv
with open("01HOKKAI.CSV") as f:
 reader = csv.reader(f)
 post = [row for row in reader]

この形で読み込むと、行列としてCSVファイルを読み込むことができます。

print(post[x][y])

この読み込んだ行列データを出力する際に、行・要素単位で使いたい場合には、こうして読み込んだデータに対して行・要素を指定してやります。例えば10行目が欲しい場合はpost[9]を出力するとその1行だけが出力されますし、7行目の8要素目を出力したければpost[6][7]と表記します。行列は0行0列から始まるので、その点を注意しておきましょう。

コメント

PAGE TOP
タイトルとURLをコピーしました