PythonでCSVに1行おきの空行が入る

PythonでCSVに1行おきの空行が入る

記事
IT・テクノロジー
カテゴリ:Python

Pythonで作ったCSVをExcelで開くと、データの間に1行ずつ空行が入る。Windowsでcsv.writerを使っているなら、まずはファイルを開くときのnewlineを確認しましょう。

対象はPython 3のcsv.writer・csv.DictWriterです。

1.openにnewline=""を追加する

csv.writerへ渡すファイルを開くときに、newline=""を指定します。引用符の中は空です。

次のコードでは、元のCSVを変更せず、別ファイルに書き出します。

import csv
rows = [["item", "count"], ["apple", 2], ["orange", 3]]
with open("output_check.csv", "x", encoding="utf-8", newline="") as f: csv.writer(f).writerows(rows)

「x」は同名ファイルがあると上書きせず止まる指定です。FileExistsErrorが出たら、まだ使っていない名前へ変えてください。保存先は、Pythonを実行したときの作業フォルダーです。

newline=""は、csvモジュールに改行処理を任せるための指定です。Windowsなどでは、csv側が付けた改行を書き込み時にもう一度変換すると、余分な改行が入ることがあります。

02_CSVの改行をそのまま保存_説明図.png
図:newline=""を指定し、CSV側の改行をそのまま保存します。

既存のコードも、csv.writerやcsv.DictWriterへ渡すopenを確認します。文字コード・区切り文字・引用符など、元の設定は残してください。Python 3では、古いPython 2向けの例を見て保存モードを「wb」に変える必要はありません。

2.空行とデータを確認する

掲載コードの出力例(Python 3.12/Linux)

item,count
apple,2
orange,3

見出しと2件のデータの間に空行がないか確認します。実データで試すときは、別名で保存して、件数と各列の内容も比べましょう。

ファイルの最後にある通常の改行は、そのままで大丈夫です。末尾の改行だけを消しても、途中の空行の原因は直りません。

まだ空行が残るとき

writerow([])を書いていないか、途中にf.write("\n")を足していないか、元のデータ自体に空の行がないか確認します。

CSV全体の改行をまとめて消すと、1つの項目に含まれる正しい改行まで壊すことがあります。出力結果を削る前に、書き出す処理を見直しましょう。pandasのto_csvで起きる場合は、別の処理として確認します。

カスタマイズやご要望がある場合は、お気軽にご相談ください。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す