Python CSV を扱う #2

株式会社リュディアです。今回は CSV ファイルの書き込みについてまとめます。

前回までの Python で CSV を扱うことについてのまとめへのリンクは以下を参考にしてください。

CSV のフォーマット自体に関するまとめは以下のリンクを参照してください。

では以下のコードを見てください。前回の CSV の読み込みで使ったコードを一部使いまわしています。

import csv

l = []

try:
   with open('note_read_sample.csv', 'r', encoding = 'utf_8-sig') as f:
       reader = csv.reader(f)
       for row in reader:
           l.append(row)
   with open('note_write_sample.csv', 'w', encoding = 'utf_8-sig') as wf:
       writer = csv.writer(wf, delimiter = ',')
       writer.writerows(l)
   
except FileNotFoundError as e:
   print('File not found', e)

CSV の読み込みで入力例とした note_read_sample.csv を読み込み、そのまま note_write_sample.csv に書き出すプログラムです。csv.reader() で リスト l_data に読み込んだものを csv.writer() の writerows() メソッドで出力します。出力した CSV は以下のようになります。

画像1

不要な改行が入ってますね。この問題をかわすには open するときに各行末尾の改行をどう扱うか指定すれば対応可能です。具体的には以下の上段の記述を下段のように newline = '' を追記します。改行コードを "" として扱うという意味です。

with open('note_write_sample.csv', 'w', encoding='utf_8-sig') as wf:
with open('note_write_sample.csv', 'w', encoding='utf_8-sig', newline = '') as wf:

最終的に以下のようなコードになります。

import csv

l = []

try:
   with open('note_read_sample.csv', 'r', encoding = 'utf_8-sig') as f:
       reader = csv.reader(f)
       for row in reader:
           l.append(row)
   with open('note_write_sample.csv', 'w', encoding = 'utf_8-sig', newline = '') as wf:
       writer = csv.writer(wf, delimiter = ',')
       writer.writerows(l)
   
except FileNotFoundError as e:
   print('File not found', e)

実行結果を以下に示します。

画像2

これで入力の CSV と出力の CSV が同じになりました。

Python CSVを扱うに関するまとめの続きは以下からどうぞ。

では、ごきげんよう。


この記事が気に入ったらサポートをしてみませんか?