PythonでCSVファイルをリストとして簡易的に読み込む

業務自動化の中で以下のようなケースがあり、CSVを読み込んでパースする必要があったので記録します。

  1. 外部サービスのCSVファイルをダウンロード
  2. ダウンロードしたCSVファイルを読み込み
  3. 必要な情報を抽出・編集
  4. スプレッドシートに書き込み

今回は3を実施するための2の部分についてのメモです。

目次

やりたいこと

CSVファイルをカンマ区切りで配列に格納。

data[行][列]の形式で保持したい。

サンプルのCSV

サンプルのCSVは以下の内容にします。

a,b,c,d,e
1,2,3,4,5
21,22,23,24,25
3-1,3-2,3-3,3-4,3-5

文字列と数値を混ぜて書いてみました。

CSV読み込み方法

モジュールのインポート

CSVを簡単に読み込む場合は、csvをインポートすれば良さそうです。

csvは標準モジュールなので、pip等は不要です。

import csv

1行ずつ読み込む

まずは1行ずつ読み込みます。

import os
import csv

with open(str(os.path.dirname(__file__)) + '/sample.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

実行結果は以下のとおり。

['a','b','c','d','e']
['1','2','3','4','5']
['21','22','23','24','25']
['3-1','3-2','3-3','3-4','3-5']

見てわかると思いますが、全てテキストデータとなります。
数値等に変換したい場合はint(value)等々でうまく変換してください。

ちなみに、os.path.dirname(__file__)は現在実行しているPythonファイルが格納されているパスを返すものです。
今回テスト実行した際はsample.pyとsample.csvが同じフォルダにあったのでこのようになっています。

全ての行が含まれている2次元配列として読み込む

2次元配列にしたい場合は、以下のように書きます

import os
import csv

with open(str(os.path.dirname(__file__)) + '/sample.csv') as f:
    reader = csv.reader(f)
    list_csv_data = [row for row in reader]
    print(list_csv_data)

実行結果は以下になります。

[['a','b','c','d','e'],['1','2','3','4','5'],['21','22','23','24','25'],['3-1','3-2','3-3','3-4','3-5']]

このとおり、2次元配列として取得できました。

解説するほどでもないですが、値を取る際はlist_csv_data[行][列]のように書けば取得できます。

たとえばlist_csv_data[1][0]であれば、’1’が返ってきます。

まとめ

まとめという程でもありませんが、以下がポイントかと思います。

  • 標準モジュールのcsvを使う
  • 取得したデータは全て文字列扱いになる

取得したデータが全て文字列になるのが嫌だったり、先頭行をラベルとして取得して便利につかったりしたい場合は、外部モジュールのpandasとかを使うのが良いかと思います。

その辺については使った際に書いていきますね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

都内Edtech企業のコーポレートエンジニア。
業務改善・自動化についての開発をしています。
エンジニア歴9年、コーポレートエンジニア歴4年。

目次