CSVファイルへの書き込みオプション
Pythonのcsvモジュールを使ってCSVファイルに書き込む際、いくつかのオプションを指定することができます。
これにより、区切り文字やクオート文字、改行コード、エンコーディングなどを変更することができます。
ここでは、それぞれのオプションについて説明します。
区切り文字の変更
デフォルトでは、CSVファイルの区切り文字はカンマ(,)ですが、これを変更することができます。
csv.writer
オブジェクトを作成する際に、delimiter
引数に任意の文字を指定することで区切り文字を変更できます。
import csv
data = [["apple", 100], ["banana", 200], ["orange", 300]]
with open("fruits.tsv", "w", newline="") as f:
writer = csv.writer(f, delimiter="\t")
for row in data:
writer.writerow(row)
上記の例では、区切り文字をタブ(\t)
に変更しています。
これにより、出力されるファイルはTSV形式(タブ区切り)になります。
クオート文字の変更
デフォルトでは、CSVファイルのクオート文字はダブルクオート(“)ですが、これを変更することができます。
csv.writer
オブジェクトを作成する際に、quotechar
引数に任意の文字を指定することでクオート文字を変更できます。
import csv
data = [["apple", "100 yen"], ["banana", "200 yen"], ["orange", "300 yen"]]
with open("fruits_quote.csv", "w", newline="") as f:
writer = csv.writer(f, quotechar="'")
for row in data:
writer.writerow(row)
上記の例では、クオート文字をシングルクオート(‘)に変更しています。
改行コードの指定
open
関数を使ってファイルを開く際に、newline
引数に改行コードを指定することができます。
デフォルトでは、newline=""
となっており、システムのデフォルトの改行コードが使用されます。
改行コードを明示的に指定する場合は、newline="\n"
(Unix系)やnewline="\r\n"
(Windows)などを指定します。
with open("fruits.csv", "w", newline="\n") as f:
writer = csv.writer(f)
for row in data:
writer.writerow(row)
デフォルトの改行コードはPythonを実行した環境によって変わるため、改行コードの扱いを統一したい場合は改行コードを明示的に指定するのがいいでしょう。
エンコーディングの指定
open
関数を使ってファイルを開く際に、encoding
引数にエンコーディングを指定することができます。
デフォルトでは、システムのデフォルトのエンコーディングが使用されます。
エンコーディングを明示的に指定する場合は、encoding="utf-8"
やencoding="shift_jis"
などを指定します。
with open("fruits_encoding.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
for row in data:
writer.writerow(row)
出力したCSVファイルをほかのソフトウェアで開いた時に文字化けする場合、読み込む際のエンコード指定を間違えている可能性があります。
Visual Studio Codeなどの一部のソフトウェアはエンコーディングを指定して読み込むことができるので、文字化けが発生する場合はエンコーディングを変更して読み込んでみてください。