[Python] IOを利用してCSVファイルを扱う方法


Devlopment note / Python    作成日付 : 2020/06/25 18:20:30   修正日付 : 2020/06/25 18:20:30

こんにちは。明月です。


この投稿はPythonでIOを利用してCSVファイルを扱う方法に関する説明です。


Pythonはローカルでよく使うスクリプト言語ですから様々なファイルを扱うライブラリがよく整理しているらしいです。

他のプログラム言語だってできないことではありませんが、個人的にPythonが環境ファイルらしいなデータを作ることでは便利ではないかと思います。


CSVファイルはデータベースや様々テーブル形式のデータでよく使う形式です。

# csvモジュールをimportする。
import csv

# リストタイプのデータ(中はタプルで設定したが、リストタイプでも関係ない。)
data = [('Tester','1'),('Who','2'),('Tom','3')]
# ファイルを開く。(CSVの内部でwritelineの関数を使いらしいが、newlineを設定しなければcsvファイルで改行になる。)
with open('csvexample.csv','wt', newline = '') as handle:
  # ファイルリソースをcsvモジュールのwrtier関数に入れる。
  csv_out = csv.writer(handle)
  # dataをcsvファイルに書く。(この関数ですべてのリストデータをCSVファイルに作成する。)
  csv_out.writerows(data)
  # writerow関数は一行ずつに作成する。つまり、条件式を入れられるCSVファイルを作成すること可能。
  #for item in data:	
  #  csv_out.writerow(item)


CSVファイルがカンマ(,)と改行の区分で作られました。

今回はCSVファイルを読み込んで使いましょう。

# csvモジュールをimportする。
import csv

# ファイルを読み込む。
with open('csvexample.csv','rt') as handle:
  # ファイルリソースをcsvモジュールのreader関数に入れる。
  csv_in = csv.reader(handle)
  # コンプリヘンションを通ってデータをリスト化する。
  data = [row for row in csv_in]
  # コンソール出力
  print(data)


ファイルのコンマ(,)と改行区分でデータを読み込んでコンソールに出力しました。


CSVファイルにヘッダーが必要な場合があります。

ディクショナリタイプを利用すればcsvファイルの一行目はデータのヘッダーで使えます。

# csvモジュールをimportする。
import csv

# データはリストタイプだが、中はタプルではなくディクショナリタイプになっている。
data = [{'name':'Tester','no':1},{'name':'Who','no':2},{'name':'Tom','no':3}]
# ファイルを開く。(CSVの内部でwritelineの関数を使いらしいが、newlineを設定しなければcsvファイルで改行になる。)
with open('csvexample.csv','wt', newline = '') as handle:
  # ファイルリソースをcsvモジュールのDictWriter関数に入れる。ディクショナリタイプでCSVに作るデータをリストタイプに指定する。
  csv_out = csv.DictWriter(handle, ['name', 'no'])
  # ヘッダーを作る。(省略すればヘッダーを生成しない。)
  csv_out.writeheader()
  # dataをcsvファイルで作る。(この関数ですべてのリストをCSVファイルに作る。)
  csv_out.writerows(data)
  # writerow関数は一行ずつに作成する。つまり、条件式を入れられるCSVファイルを作成すること可能。
  #for item in data:	
  #  csv_out.writerow(item)


ディクショナリタイプになっているリストでCSVファイルを作成しました。そして一行目はheaderとしてタイトルを入れました。

今回はまたCSVファイルをディレクトリタイプで読み込みます。

# csvモジュールをimportする。
import csv

# ファイルを読み込む。
with open('csvexample.csv','rt') as handle:
  # ファイルリソースをcsvモジュールのDictReader関数に入れる。
  csv_in = csv.DictReader(handle)
  # コンプリヘンションを通ってデータをリスト化する。
  data = [row for row in csv_in]
  # コンソール出力
  print(data)


結果はOrderDictタイプで出力されます。一般ディクショナリタイプではないですが、ディクショナリの種類なのでディクショナリタイプでCSVファイルを読み込みました。


ここまでPythonでIOを利用してCSVファイルを扱う方法に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

最新投稿