Python CSVの読み書き入門!文字化けさせない方法から実務で役立つ応用テクまで徹底解説

Python CSVの読み書き入門!文字化けさせない方法から実務で役立つ応用テクまで徹底解説

ビジネスの現場では、顧客リストや売上データなど、さまざまな情報を表形式で扱う機会が頻繁にあります。その際に広く利用されているのが「CSVファイル」です。Excelで手軽に開ける一方、Pythonプログラムで処理することで、大量のデータを効率的に扱ったり、定型的な作業を自動化したりできます。

この記事では、プログラミング初心者やビジネスパーソンの方々を対象に、Pythonの標準機能である「csvモジュール」を使ったCSVファイルの基本的な読み書き方法から、実務で直面しがちな「文字化け」問題の解決策、さらには一歩進んだ応用テクニックまで、丁寧に解説していきます。

CSVファイルとは何か? なぜPythonで扱うのか?

まずはじめに、CSVファイルがどのようなものか、そしてなぜExcelだけでなくPythonを使うと便利なのかを理解しておきましょう。

CSVファイルは「カンマで区切られた値」

CSVとは「Comma-Separated Values」の略で、その名の通り、データをカンマ(,)で区切って並べたシンプルなテキストファイル形式のことです。 Excelなどの表計算ソフトで作成した表データを、書式(色やフォントなど)を stripped offにし、データだけを保存する形式と考えると分かりやすいでしょう。

CSV Excel 比較

例えば、以下のような社員名簿の表があるとします。

名前 部署 年齢
田中 太郎 営業部 30
山田 花子 開発部 25

このデータをCSVファイルで表現すると、以下のようになります。

名前,部署,年齢
田中 太郎,営業部,30
山田 花子,開発部,25

このように非常にシンプルな構造のため、データ量が軽く、さまざまなシステムやアプリケーションでデータを交換する際に広く利用されています。

PythonでCSVを扱うメリット

  • 自動化: 毎週・毎月発生するレポート作成など、定型的なCSV処理を自動化し、業務を効率化できます。
  • 大量データ処理: Excelでは開くのが困難な、何十万行にも及ぶ巨大なCSVファイルも、Pythonなら軽快に処理できます。
  • 柔軟なデータ加工: 特定の条件に合う行だけを抽出したり、複数のCSVファイルを結合したり、複雑なデータ加工を自由自在に行えます。

手作業でのCSV編集には限界があります。Pythonを活用することで、これらの作業を正確かつ迅速に行えるようになります。

【基本編】PythonのcsvモジュールでCSVを読み書きする

Pythonには、CSVファイルを簡単に扱うための「csvモジュール」が標準で備わっています。 追加のインストールは不要で、すぐに使い始めることができます。 ここでは、その基本的な使い方である「読み込み(reader)」と「書き込み(writer)」を見ていきましょう。

CSVファイルの読み込み:csv.reader()

CSVファイルを読み込むには、まず組み込み関数のopen()でファイルを開き、その情報をcsv.reader()に渡します。

csv.readerは、CSVファイルの各行をリスト(複数の値を順番に並べたもの)として取得できるオブジェクトを返します。 forループと組み合わせることで、1行ずつデータを取り出して処理できます。

sample.csv

Alice,営業部,30
Bob,開発部,25
Charlie,営業部,35

Pythonコード


import csv

# ファイルを開いて処理を行う
with open('sample.csv', 'r', newline='', encoding='utf-8') as f:
    # readerオブジェクトを作成
    reader = csv.reader(f)
    
    # 1行ずつループで処理
    for row in reader:
        print(row)

実行結果

['Alice', '営業部', '30']
['Bob', '開発部', '25']
['Charlie', '営業部', '35']

各行が文字列のリストとして読み込まれているのがわかります。 row[0]で1列目、row[1]で2列目のデータにアクセスできます。

💡 初心者向けTIPS: with open(...) とは?
with open(...) as f:という構文は、ファイルを開いた後に処理が終了したら自動的にファイルを閉じてくれる便利な書き方です。ファイルを閉め忘れると予期せぬエラーの原因になるため、ファイル操作ではこのwith構文を使うのが一般的です。
⚠️ 重要ポイント: newline=''encoding='utf-8'

  • newline='': CSVファイルを扱う際は、このおまじないを必ず付けるようにしましょう。 これを指定しないと、特にWindows環境で、読み込んだ際に不要な空行が入ってしまうなどの問題が起きることがあります。 CSVモジュールが改行を適切に処理するために必要な設定です。
  • encoding='utf-8': ファイルに日本語が含まれる場合、文字コードの指定が不可欠です。 UTF-8は現在最も広く使われている文字コードで、これを指定することで文字化けのリスクを減らせます。文字化けについては後ほど詳しく解説します。

CSVファイルへの書き込み:csv.writer()

次に、Pythonで作成したデータをCSVファイルに書き出す方法です。読み込みと同様にopen()でファイルを開きますが、今度はモードを書き込み用の'w'にします。そしてcsv.writer()を使います。

Pythonコード


import csv

# 書き込むデータ(リストのリスト形式)
data = [
    ['Alice', '営業部', '30'],
    ['Bob', '開発部', '25'],
    ['Charlie', '営業部', '35']
]

# 'w'モードでファイルを開く
with open('output.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    
    # writerowで1行ずつ書き込み
    # writer.writerow(['ヘッダー1', 'ヘッダー2', 'ヘッダー3'])
    
    # writerowsで複数行をまとめて書き込み
    writer.writerows(data)

このコードを実行すると、output.csvというファイルが作成され、dataの内容がカンマ区切りで書き込まれます。 writerow()は1行(1つのリスト)を、writerows()は複数行(リストのリスト)を書き込むためのメソッドです。

ここでも、書き込み時にnewline=''を指定することが非常に重要です。これがないと、Windowsでは行間に余計な空行が挿入されてしまう原因となります。

【応用編】実務に役立つCSV操作テクニック

基本的な読み書きができるようになったら、次は実務でよく遭遇する少し複雑なケースに対応してみましょう。

区切り文字(デリミタ)を変更する

CSVは「カンマ区切り」が基本ですが、タブで区切られた「TSVファイル」や、セミコロン(;)で区切られたファイルも存在します。 csv.readercsv.writerではdelimiter引数を使うことで、区切り文字を自由に変更できます。

タブ区切りファイル(TSV)の読み込み


# delimiter='\t' でタブ区切りを指定
reader = csv.reader(f, delimiter='\t')

セミコロン区切りファイルへの書き込み


# delimiter=';' でセミコロン区切りを指定
writer = csv.writer(f, delimiter=';')

引用符(クォート)の扱いを制御する

もしデータ自体にカンマや改行が含まれている場合、CSVではそのデータをダブルクォーテーション(")で囲むというルールがあります。 例えば、「東京都, 港区」というデータは"東京都, 港区"のように表現されます。
Pythonのcsvモジュールは、この処理を自動的に行ってくれるので非常に賢いのですが、quoting引数でその挙動を細かく制御することも可能です。

  • csv.QUOTE_MINIMAL(デフォルト): カンマや改行など、特別な文字を含むフィールドのみを引用符で囲みます。ほとんどの場合はこれで十分です。
  • csv.QUOTE_ALL: すべてのフィールドを引用符で囲みます。
  • csv.QUOTE_NONNUMERIC: 数値でないフィールドをすべて引用符で囲みます。
  • csv.QUOTE_NONE: 一切引用符で囲みません。データ内に区切り文字が含まれているとファイルが壊れるため、注意が必要です。

例:すべてのフィールドを引用符で囲んで書き出す


writer = csv.writer(f, quoting=csv.QUOTE_ALL)

【発展編】辞書形式でCSVを扱う(DictReader / DictWriter)

ここまでの方法では、各行をリストとして扱いました(例:row[0])。しかし、列が増えてくると「0番目って何だっけ?」と分かりにくくなりがちです。
そんな時に便利なのが、CSVの1行目をヘッダー(見出し)として扱い、各行を「列名: 値」のペアを持つ辞書として読み書きする方法です。 これにはcsv.DictReadercsv.DictWriterを使います。

Python CSV 実行

DictReader:ヘッダー付きCSVを辞書として読み込む

csv.DictReaderは、1行目を自動的にキー(辞書の「名前」の部分)として認識し、2行目以降の各行を辞書オブジェクトに変換してくれます。

employees.csv

名前,部署,年齢
田中太郎,営業部,30
山田花子,人事部,25

Pythonコード


import csv

with open('employees.csv', 'r', newline='', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        # 辞書のキー(列名)でデータにアクセスできる
        print(f"名前: {row['名前']}, 部署: {row['部署']}")

実行結果

名前: 田中太郎, 部署: 営業部
名前: 山田花子, 部署: 人事部

row[0]ではなくrow['名前']のように列名でアクセスできるため、コードが直感的で非常に分かりやすくなります。

DictWriter:辞書のリストをCSVに書き込む

逆に、辞書が格納されたリストをCSVファイルに書き出すにはcsv.DictWriterを使います。

書き込む際には、fieldnames引数でヘッダーの列名を指定する必要があります。 そして、writeheader()メソッドを呼び出すことで、CSVファイルの1行目にヘッダー行を書き込むことができます。

Pythonコード


import csv

# 書き込むデータ(辞書のリスト)
data = [
    {'名前': '田中太郎', '部署': '営業部', '年齢': '30'},
    {'名前': '山田花子', '部署': '人事部', '年齢': '25'}
]

# ヘッダーとなるキーのリスト
fieldnames = ['名前', '部署', '年齢']

with open('employees_out.csv', 'w', newline='', encoding='utf-8') as f:
    # fieldnamesでヘッダーを指定
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    
    # ヘッダー行を書き込む
    writer.writeheader()
    
    # データを書き込む
    writer.writerows(data)

この方法を使えば、プログラム内で辞書として扱っているデータを、そのままの構造でCSVに保存できるため、非常に便利です。

【最重要】文字化けの原因と対処法

日本語を含むCSVを扱う上で、避けては通れないのが「文字化け」の問題です。Pythonで出力したCSVをExcelで開いたら、日本語が意味不明な記号になってしまった、という経験は多くの人が通る道です。

文字化け 日本語 Excel

なぜ文字化けは起こるのか?

文字化けは、ファイルの「文字エンコーディング(文字コード)」と、それを読み取るソフトが想定しているエンコーディングが食い違うことで発生します。 エンコーディングとは、文字をコンピュータが理解できるバイト列に変換するためのルールのことです。

  • UTF-8: 世界中で標準的に使われている文字コード。Webページなど、多くの場面で採用されています。
  • Shift_JIS (またはCP932): 日本語版のWindowsで古くから使われてきた文字コード。

問題は、Pythonが標準的にUTF-8でファイルを出力するのに対し、古いバージョンのExcelはCSVファイルを開く際にShift_JISを前提としている点にあります。 そのため、UTF-8で書かれたファイルをExcelがShift_JISとして無理やり解釈しようとし、結果として文字化けが起こるのです。

Excelで文字化けさせないための解決策

最も簡単で推奨される解決策は、ファイルを「BOM付きUTF-8」という形式で保存することです。

BOM(Byte Order Mark)とは、ファイルの先頭に付加される「このファイルはUTF-8ですよ」という目印のようなものです。ExcelはこのBOMを認識すると、ファイルを正しくUTF-8として開いてくれるため、文字化けを防ぐことができます。

PythonでBOM付きUTF-8のファイルを書き出すのは非常に簡単です。open()関数のエンコーディング指定を'utf-8'から'utf-8-sig'に変えるだけです。

BOM付きUTF-8で書き出すコード例


# encodingを'utf-8-sig'にするだけ!
with open('excel_safe.csv', 'w', newline='', encoding='utf-8-sig') as f:
    writer = csv.writer(f)
    writer.writerow(['名前', '備考'])
    writer.writerow(['山田花子', '髙島屋で購入']) # Shift_JISでは表現できない文字もOK
💡 別の方法:Shift_JISで出力する
encoding='shift_jis'(または'cp932')を指定して、Excelが期待する文字コードで直接書き出す方法もあります。 ただしこの方法には、「髙(はしごだか)」や一部の記号など、Shift_JISには含まれない文字があるとエラー(UnicodeEncodeError)になってしまうという欠点があります。 そのため、特別な理由がない限りは、より多くの文字を扱える'utf-8-sig'の利用を強くお勧めします。

まとめ:PythonでCSV操作をマスターしよう!

この記事では、Pythonのcsvモジュールを使ったCSVファイルの操作方法について、基本的な読み書きから実用的なテクニック、そして最も重要な文字化け対策までを解説しました。

本記事のポイント

  • CSVの読み書きにはcsv.readercsv.writerが基本。
  • ファイルを開く際はwith open()構文とnewline=''を忘れずに。
  • 列名でデータを扱いたい場合はDictReaderDictWriterが非常に便利。
  • Excelでの文字化け対策は、書き込み時にencoding='utf-8-sig'を指定するのが最も効果的。

手作業で行っていたCSVの集計や加工作業も、一度Pythonスクリプトを作成してしまえば、ボタン一つで完了させることができます。 本記事を参考に、ぜひ日々の業務にPythonでのCSV操作を取り入れて、作業の自動化・効率化への第一歩を踏み出してください。

“`


citationタグを除去したHTML

“`html

Python CSVの読み書き入門!文字化けさせない方法から実務で役立つ応用テクまで徹底解説

ビジネスの現場では、顧客リストや売上データなど、さまざまな情報を表形式で扱う機会が頻繁にあります。その際に広く利用されているのが「CSVファイル」です。Excelで手軽に開ける一方、Pythonプログラムで処理することで、大量のデータを効率的に扱ったり、定型的な作業を自動化したりできます。

この記事では、プログラミング初心者やビジネスパーソンの方々を対象に、Pythonの標準機能である「csvモジュール」を使ったCSVファイルの基本的な読み書き方法から、実務で直面しがちな「文字化け」問題の解決策、さらには一歩進んだ応用テクニックまで、丁寧に解説していきます。

CSVファイルとは何か? なぜPythonで扱うのか?

まずはじめに、CSVファイルがどのようなものか、そしてなぜExcelだけでなくPythonを使うと便利なのかを理解しておきましょう。

CSVファイルは「カンマで区切られた値」

CSVとは「Comma-Separated Values」の略で、その名の通り、データをカンマ(,)で区切って並べたシンプルなテキストファイル形式のことです。 Excelなどの表計算ソフトで作成した表データを、書式(色やフォントなど)を stripped offにし、データだけを保存する形式と考えると分かりやすいでしょう。

CSV Excel 比較

例えば、以下のような社員名簿の表があるとします。

名前 部署 年齢
田中 太郎 営業部 30
山田 花子 開発部 25

このデータをCSVファイルで表現すると、以下のようになります。

名前,部署,年齢
田中 太郎,営業部,30
山田 花子,開発部,25

このように非常にシンプルな構造のため、データ量が軽く、さまざまなシステムやアプリケーションでデータを交換する際に広く利用されています。

PythonでCSVを扱うメリット

  • 自動化: 毎週・毎月発生するレポート作成など、定型的なCSV処理を自動化し、業務を効率化できます。
  • 大量データ処理: Excelでは開くのが困難な、何十万行にも及ぶ巨大なCSVファイルも、Pythonなら軽快に処理できます。
  • 柔軟なデータ加工: 特定の条件に合う行だけを抽出したり、複数のCSVファイルを結合したり、複雑なデータ加工を自由自在に行えます。

手作業でのCSV編集には限界があります。Pythonを活用することで、これらの作業を正確かつ迅速に行えるようになります。

【基本編】PythonのcsvモジュールでCSVを読み書きする

Pythonには、CSVファイルを簡単に扱うための「csvモジュール」が標準で備わっています。 追加のインストールは不要で、すぐに使い始めることができます。 ここでは、その基本的な使い方である「読み込み(reader)」と「書き込み(writer)」を見ていきましょう。

CSVファイルの読み込み:csv.reader()

CSVファイルを読み込むには、まず組み込み関数のopen()でファイルを開き、その情報をcsv.reader()に渡します。

csv.readerは、CSVファイルの各行をリスト(複数の値を順番に並べたもの)として取得できるオブジェクトを返します。 forループと組み合わせることで、1行ずつデータを取り出して処理できます。

sample.csv

Alice,営業部,30
Bob,開発部,25
Charlie,営業部,35

Pythonコード


import csv

# ファイルを開いて処理を行う
with open('sample.csv', 'r', newline='', encoding='utf-8') as f:
    # readerオブジェクトを作成
    reader = csv.reader(f)
    
    # 1行ずつループで処理
    for row in reader:
        print(row)

実行結果

['Alice', '営業部', '30']
['Bob', '開発部', '25']
['Charlie', '営業部', '35']

各行が文字列のリストとして読み込まれているのがわかります。 row[0]で1列目、row[1]で2列目のデータにアクセスできます。

💡 初心者向けTIPS: with open(...) とは?
with open(...) as f:という構文は、ファイルを開いた後に処理が終了したら自動的にファイルを閉じてくれる便利な書き方です。ファイルを閉め忘れると予期せぬエラーの原因になるため、ファイル操作ではこのwith構文を使うのが一般的です。
⚠️ 重要ポイント: newline=''encoding='utf-8'

  • newline='': CSVファイルを扱う際は、このおまじないを必ず付けるようにしましょう。 これを指定しないと、特にWindows環境で、読み込んだ際に不要な空行が入ってしまうなどの問題が起きることがあります。 CSVモジュールが改行を適切に処理するために必要な設定です。
  • encoding='utf-8': ファイルに日本語が含まれる場合、文字コードの指定が不可欠です。 UTF-8は現在最も広く使われている文字コードで、これを指定することで文字化けのリスクを減らせます。文字化けについては後ほど詳しく解説します。

CSVファイルへの書き込み:csv.writer()

次に、Pythonで作成したデータをCSVファイルに書き出す方法です。読み込みと同様にopen()でファイルを開きますが、今度はモードを書き込み用の'w'にします。そしてcsv.writer()を使います。

Pythonコード


import csv

# 書き込むデータ(リストのリスト形式)
data = [
    ['Alice', '営業部', '30'],
    ['Bob', '開発部', '25'],
    ['Charlie', '営業部', '35']
]

# 'w'モードでファイルを開く
with open('output.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    
    # writerowで1行ずつ書き込み
    # writer.writerow(['ヘッダー1', 'ヘッダー2', 'ヘッダー3'])
    
    # writerowsで複数行をまとめて書き込み
    writer.writerows(data)

このコードを実行すると、output.csvというファイルが作成され、dataの内容がカンマ区切りで書き込まれます。 writerow()は1行(1つのリスト)を、writerows()は複数行(リストのリスト)を書き込むためのメソッドです。

ここでも、書き込み時にnewline=''を指定することが非常に重要です。これがないと、Windowsでは行間に余計な空行が挿入されてしまう原因となります。

【応用編】実務に役立つCSV操作テクニック

基本的な読み書きができるようになったら、次は実務でよく遭遇する少し複雑なケースに対応してみましょう。

区切り文字(デリミタ)を変更する

CSVは「カンマ区切り」が基本ですが、タブで区切られた「TSVファイル」や、セミコロン(;)で区切られたファイルも存在します。 csv.readercsv.writerではdelimiter引数を使うことで、区切り文字を自由に変更できます。

タブ区切りファイル(TSV)の読み込み


# delimiter='\t' でタブ区切りを指定
reader = csv.reader(f, delimiter='\t')

セミコロン区切りファイルへの書き込み


# delimiter=';' でセミコロン区切りを指定
writer = csv.writer(f, delimiter=';')

引用符(クォート)の扱いを制御する

もしデータ自体にカンマや改行が含まれている場合、CSVではそのデータをダブルクォーテーション(")で囲むというルールがあります。 例えば、「東京都, 港区」というデータは"東京都, 港区"のように表現されます。
Pythonのcsvモジュールは、この処理を自動的に行ってくれるので非常に賢いのですが、quoting引数でその挙動を細かく制御することも可能です。

  • csv.QUOTE_MINIMAL(デフォルト): カンマや改行など、特別な文字を含むフィールドのみを引用符で囲みます。ほとんどの場合はこれで十分です。
  • csv.QUOTE_ALL: すべてのフィールドを引用符で囲みます。
  • csv.QUOTE_NONNUMERIC: 数値でないフィールドをすべて引用符で囲みます。
  • csv.QUOTE_NONE: 一切引用符で囲みません。データ内に区切り文字が含まれているとファイルが壊れるため、注意が必要です。

例:すべてのフィールドを引用符で囲んで書き出す


writer = csv.writer(f, quoting=csv.QUOTE_ALL)

【発展編】辞書形式でCSVを扱う(DictReader / DictWriter)

ここまでの方法では、各行をリストとして扱いました(例:row[0])。しかし、列が増えてくると「0番目って何だっけ?」と分かりにくくなりがちです。
そんな時に便利なのが、CSVの1行目をヘッダー(見出し)として扱い、各行を「列名: 値」のペアを持つ辞書として読み書きする方法です。 これにはcsv.DictReadercsv.DictWriterを使います。

Python CSV 実行

DictReader:ヘッダー付きCSVを辞書として読み込む

csv.DictReaderは、1行目を自動的にキー(辞書の「名前」の部分)として認識し、2行目以降の各行を辞書オブジェクトに変換してくれます。

employees.csv

名前,部署,年齢
田中太郎,営業部,30
山田花子,人事部,25

Pythonコード


import csv

with open('employees.csv', 'r', newline='', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        # 辞書のキー(列名)でデータにアクセスできる
        print(f"名前: {row['名前']}, 部署: {row['部署']}")

実行結果

名前: 田中太郎, 部署: 営業部
名前: 山田花子, 部署: 人事部

row[0]ではなくrow['名前']のように列名でアクセスできるため、コードが直感的で非常に分かりやすくなります。

DictWriter:辞書のリストをCSVに書き込む

逆に、辞書が格納されたリストをCSVファイルに書き出すにはcsv.DictWriterを使います。

書き込む際には、fieldnames引数でヘッダーの列名を指定する必要があります。 そして、writeheader()メソッドを呼び出すことで、CSVファイルの1行目にヘッダー行を書き込むことができます。

Pythonコード


import csv

# 書き込むデータ(辞書のリスト)
data = [
    {'名前': '田中太郎', '部署': '営業部', '年齢': '30'},
    {'名前': '山田花子', '部署': '人事部', '年齢': '25'}
]

# ヘッダーとなるキーのリスト
fieldnames = ['名前', '部署', '年齢']

with open('employees_out.csv', 'w', newline='', encoding='utf-8') as f:
    # fieldnamesでヘッダーを指定
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    
    # ヘッダー行を書き込む
    writer.writeheader()
    
    # データを書き込む
    writer.writerows(data)

この方法を使えば、プログラム内で辞書として扱っているデータを、そのままの構造でCSVに保存できるため、非常に便利です。

【最重要】文字化けの原因と対処法

日本語を含むCSVを扱う上で、避けては通れないのが「文字化け」の問題です。Pythonで出力したCSVをExcelで開いたら、日本語が意味不明な記号になってしまった、という経験は多くの人が通る道です。

文字化け 日本語 Excel

なぜ文字化けは起こるのか?

文字化けは、ファイルの「文字エンコーディング(文字コード)」と、それを読み取るソフトが想定しているエンコーディングが食い違うことで発生します。 エンコーディングとは、文字をコンピュータが理解できるバイト列に変換するためのルールのことです。

  • UTF-8: 世界中で標準的に使われている文字コード。Webページなど、多くの場面で採用されています。
  • Shift_JIS (またはCP932): 日本語版のWindowsで古くから使われてきた文字コード。

問題は、Pythonが標準的にUTF-8でファイルを出力するのに対し、古いバージョンのExcelはCSVファイルを開く際にShift_JISを前提としている点にあります。 そのため、UTF-8で書かれたファイルをExcelがShift_JISとして無理やり解釈しようとし、結果として文字化けが起こるのです。

Excelで文字化けさせないための解決策

最も簡単で推奨される解決策は、ファイルを「BOM付きUTF-8」という形式で保存することです。

BOM(Byte Order Mark)とは、ファイルの先頭に付加される「このファイルはUTF-8ですよ」という目印のようなものです。ExcelはこのBOMを認識すると、ファイルを正しくUTF-8として開いてくれるため、文字化けを防ぐことができます。

PythonでBOM付きUTF-8のファイルを書き出すのは非常に簡単です。open()関数のエンコーディング指定を'utf-8'から'utf-8-sig'に変えるだけです。

BOM付きUTF-8で書き出すコード例


# encodingを'utf-8-sig'にするだけ!
with open('excel_safe.csv', 'w', newline='', encoding='utf-8-sig') as f:
    writer = csv.writer(f)
    writer.writerow(['名前', '備考'])
    writer.writerow(['山田花子', '髙島屋で購入']) # Shift_JISでは表現できない文字もOK
💡 別の方法:Shift_JISで出力する
encoding='shift_jis'(または'cp932')を指定して、Excelが期待する文字コードで直接書き出す方法もあります。 ただしこの方法には、「髙(はしごだか)」や一部の記号など、Shift_JISには含まれない文字があるとエラー(UnicodeEncodeError)になってしまうという欠点があります。 そのため、特別な理由がない限りは、より多くの文字を扱える'utf-8-sig'の利用を強くお勧めします。

まとめ:PythonでCSV操作をマスターしよう!

この記事では、Pythonのcsvモジュールを使ったCSVファイルの操作方法について、基本的な読み書きから実用的なテクニック、そして最も重要な文字化け対策までを解説しました。

本記事のポイント

  • CSVの読み書きにはcsv.readercsv.writerが基本。
  • ファイルを開く際はwith open()構文とnewline=''を忘れずに。
  • 列名でデータを扱いたい場合はDictReaderDictWriterが非常に便利。
  • Excelでの文字化け対策は、書き込み時にencoding='utf-8-sig'を指定するのが最も効果的。

手作業で行っていたCSVの集計や加工作業も、一度Pythonスクリプトを作成してしまえば、ボタン一つで完了させることができます。 本記事を参考に、ぜひ日々の業務にPythonでのCSV操作を取り入れて、作業の自動化・効率化への第一歩を踏み出してください。

“`
Sources
help
techplay.jp
techgym.jp
toshiocp.com
arara.com
netattest.com
form-mailer.jp
i-3-i.info
wingarc.com
tech-teacher.jp
popinsight.jp
nkmk.me
sejuku.net
envader.plus
stackoverflow.com
hatenablog.com
assist-all.co.jp
python.org
python.org
land.to
qiita.com
pythonaiclarifydoubts.com
asahi.co.jp
qiita.com
dse-souken.com
note.com
0rz.org