PythonでCSVデータを読んでみた
Python3でCSVのデータの読み込みと出力をしてみました。
目次
csvライブラリ
Pythonの標準ライブラリのcsvライブラリを使って読み書きしてみました。
Excelを使うことが多いので、基本的にはExcelから出力されたCSVファイルを扱うことが多いのですが、たまに手打ちでCSVファイルを書いたりします。そういうときに、私にとっての可読性を良くするために、カンマの後ろにスペースを入れたりします。
readerにdialectをexcelと指定するとExcel様式として読み込んでくれるのですが、残念なことにこの様式ですとカンマの後ろのスペースを無視してくれません。規約としてはそれが正しいのですが、いちいち後からスペースを取り除くのも面倒です。
そこで、csv.excelクラスを継承したクラスを作って、スペースを無視してもらうようにしてみました。
試してみた
コードを見るのが手っ取り早いと思います。
どういうものを作ったかというと、
csvライブラリをインポート。
csv.excelクラスを継承したクラスを作成。
作ったクラスをcsv.register_dialectでDialectとして登録。
CSVファイルの読み込み。
データの加工。
ファイルに出力。
データの加工は、行の最初のフィールドと2つ目以降の各フィールドとのペアに変換するという、あまりしない操作です。
コード
import csv
class MyCSV(csv.excel):
skipinitialspace = True
csv.register_dialect('myCSV', MyCSV)
# 読み込み
readdata = []
with open('csvtest.csv', newline='') as f:
reader = csv.reader(f, dialect='myCSV')
for row in reader:
readdata.append(row)
print('読み込んだデータ')
print(readdata)
print('')
outdata = []
for row in readdata:
c = 1
while c < len(row):
d = []
d.append(row[0])
d.append(row[c])
outdata.append(d)
c = c + 1
# 書き込み
with open('csvout.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(outdata)
結果
入力したCSVファイルはこんな感じです。
# 列A,列B,列C,
1, 3, 5,
"ちゅう","ちゅう","たこ
かい","な"
Yes, we, can,
フィールドの数がそろってなかったり、フィールドの中に改行があったり、ダブルクォーテーションが付いていたりいなかったり、嫌らしいデータですね。
プログラムを実行した際の出力はこうなりました。
C:\>python csvtest.py
読み込んだデータ
[['# 列A', '列B', '列C', ''], ['1', '3', '5', ''], ['ちゅう', 'ちゅう', 'たこ\r\nかい', 'な'], ['Yes', 'we', 'can', '']]
ちゃんと読み込んでますね。 出力されたCSVファイルはこんな感じです。
# 列A,列B
# 列A,列C
# 列A,
1,3
1,5
1,
ちゅう,ちゅう
ちゅう,"たこ
かい"
ちゅう,な
Yes,we
Yes,can
Yes,
きちんと出力されました。
公開日
広告