Jaybanuan's Blog

どうせまた調べるハメになることをメモしていくブログ

Shift JIS (というかCP932)のCSVを扱うPythonプログラムを、VS Codeで開発するための作業テンプレ

はじめに

レガシーな業務系の基幹システムとデータ連携する場合は、まだまだCSVが活躍している。 今後もCSV処理ツールを作り続けそうなので、作業のテンプレを残しておく。

特に注意が必要なのが、日本語版のWindowsで作成されたCSVは、往々にして文字コードがCP932であるところ。

環境

$ cat /etc/os-release | grep PRETTY_NAME
PRETTY_NAME="Ubuntu 22.04.2 LTS"

$ uname -srvm
Linux 5.19.0-40-generic #41~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 31 16:00:14 UTC 2 x86_64

$ python3 --version
Python 3.10.6

$ code --version
1.77.3
704ed70d4fd1c6bd6342c436f1ede30d1cff4710
x64

VS Codeには以下のPython用の拡張を導入済み。

Pythonで利用するツールやライブラリ

今回のPythonプログラムの開発では、以下を利用する。

  • Poetry

    • Pythonのパッケージングと依存関係の管理を行うツール
  • Pandas

    • CSVやDBなどの表形式のデータを加工したり分析するツール

(1) Poetryのインストール

Poetryの公式サイトの手順に沿って、以下のコマンドを実行する。

$ curl -sSL https://install.python-poetry.org | python3 -

以下のように、Poetryのバージョンを確認してみる。

$ poetry --version
Poetry (version 1.4.2)

(2) プロジェクトの作成

ここでは、作成するプロジェクトの名前をcsvsampleとする。 以下のように、ターミナルでプロジェクトを作成するディレクトリ(例えば~/src)に移動した後、プロジェクトを作成する。

$ cd ~/src
$ poetry new csvsample

その結果、以下のようなディレクトリ構成が作成される。

~/src
└── csvsample
    ├── README.md
    ├── csvsample
    │   └── __init__.py
    ├── pyproject.toml
    └── tests
        └── __init__.py

(3) コードの作成

まず、~/src/csvsampleをワーキングディレクトリとしてVS Codeを起動した後、Explorercsvsample/tool.pyを作成し、以下の内容で保存する。

import sys
import pandas


def main(csv_file_path):
    data_frame = pandas.read_csv(csv_file_path, encoding='cp932')
    print(data_frame)


if __name__ == '__main__':
    main(sys.argv[1])

pandas.read_csv()に引き渡す文字コードだが、「WindowsはShift JIS」という思い込みがあるので思わず'shit_jis'を指定したくなるものの、これだと機種依存文字に対応できない場合がある。 よって、Shift JISのMicrosoftの拡張である'cp932'が正解。

この時点では、まだPandasがインストールされていないので、コードエディタ上でimport pandasあたりがエラーになっているはず。

次に、以下の内容でdata.csvを作成しておく。

"id","name","age"
"1000","John","20"
"1001","Jane","30"

(4) Pandasのインストール

ライブラリPandasをインストールするために、Terminalを開いて以下のコマンドを実行する。

$ poetry add pandas

Pandasをインストールしても、まだコード中のエラーは消えないはず。

(5) VS Codeで仮想環境を指定

コード中のpandasが見つからないというエラーを解消するには、VS CodeにPoetryが作成した仮想環境を指定する必要がある。 Poetryは、デフォルトでは~/.cache/pypoetry/virtualenvsに仮想環境のディレクトリを作成する。

VS Codeのcommand palletpython: select interpreterと入力するか、ステータスバーの以下の部分をクリックして、Pythonの仮想環境を指定するポップアップを開く。

そして、以下のように右端にPoetryと書いてあるエントリを選択する。

これで、コードエディタ上のエラーは解消する。

(6) 動作確認

VS Code上のTerminalを開き直すと、上記で設定した仮想環境に自動的に切り替わる。 そのTerminalで以下のように作成したPythonプログラムを実行する。

$ python3 csvsample/tool.py data.csv 
     id  name  age
0  1000  John   20
1  1001  Jane   30