Python csv を使ってみる 試験対策 pandasでよくない?・・・けどしゃーない

CSVファイル JSONファイルの読み書き

pandasでよくないか?って話もあるけど、csvモジュールを使ってみる 理由として、試験のためです。oh...no...

まずはシンプルにCSVファイルを読み込んでみる

import csv 

with open('sample.csv', 'r') as f:
   reader = csv.reader(f)
   for row in reader:
       print(row)

デフォルトではカンマ区切りで読み込むが、区切り文字を指定することもできる

import csv

with open('sample.tsv', 'r') as f:
   reader = csv.reader(f, delimiter='\t')
   for row in reader:
       print(row)

他のオプションも調べてみよう

import csv

with open('sample.csv', 'r') as f:
   reader = csv.reader(f, delimiter=',', quotechar='"', skipinitialspace=True, lineterminator='\n')
   for row in reader:
       print(row)

 delimiter: 区切り文字
 quotechar: 引用符 (デフォルトはダブルクォート)
 skipinitialspace: 行頭の空白を無視するかどうか
 lineterminator: 行の終端文字

上記を1つ1つ設定する方法もあるが、dialectを使うとある程度まとめて設定できる

import csv

with open('sample.csv', 'r') as f:
   reader = csv.reader(f, dialect='excel')
   for row in reader:
       print(row)
       

dialect: 設定をまとめたもの (excel, excel-tab, unix等)がある例えば

 excel: delimiter=',', quotechar='"', skipinitialspace=False, lineterminator='\r\n'
 excel-tab: delimiter='\t', quotechar='"', skipinitialspace=False, lineterminator='\r\n'
 unix: delimiter=',', quotechar='"', skipinitialspace=False, lineterminator='\n'

試験対策として、Windowsでの改行コードは\r\n、Unixでの改行コードは\n、というのは覚えておくといいかもしれない

という感じであらかじめ設定がされている

CSVファイルに書き込む方法

writerオブジェクトを用意する

  1. writerow()メソッドを使う

  2. writerows()メソッドを使う writerow()メソッドは1行分のデータを書き込む writerows()メソッドは複数行分のデータを書き込む

試験ではwriterow()メソッドとwriterows()メソッドの違い出ると思う。

まずはwriterow()メソッドを使ってみる

import csv

data = [
   ['apple', 100],
   ['banana', 200],
   ['orange', 300]
]

with open('output.csv', 'w') as f:
   writer = csv.writer(f)
   for row in data:
       writer.writerow(row)

writerowの場合は、1行分のデータを書き込むので、for文で1行ずつ書き込む

次にwriterows()メソッドを使ってみる

import csv

data = [
   ['apple', 100],
   ['banana', 200],
   ['orange', 300]
]

with open('output.csv', 'w') as f:
   writer = csv.writer(f)
   writer.writerows(data)

writerows()メソッドは、複数行分のデータを書き込むので、for文を使わずに書き込むことができる

DictWriterを使ってみる DictWriterを使うと、辞書型のデータを書き込むことができる


import csv

data = [
   {'name': 'apple', 'price': 100},
   {'name': 'banana', 'price': 200},
   {'name': 'orange', 'price': 300}
]

with open('output.csv', 'w') as f:
   fieldnames = ['name', 'price']
   writer = csv.DictWriter(f, fieldnames=fieldnames)
   writer.writeheader() # ヘッダーを書き込む
   writer.writerows(data)

どんな感じで書き込まれるか

name	price
apple	100
banana	200
orange	300

Snifferについて

Snifferを使うと、CSVファイルの設定を自動で判定することができる

例えば、区切り文字や引用符、行頭の空白を判定することができる

import csv

with open('sample.csv', 'r') as f:
   dialect = csv.Sniffer().sniff(f.read(1024)) #サンプルとして1024バイト読み込む
   f.seek(0) #ファイルの先頭に戻る
   reader = csv.reader(f, dialect=dialect) # Snifferで判定した設定を使って読み込む
   for row in reader:
       print(row)

少し手順としてはクセがあるが、自動で設定を判定してくれるので便利。以下に流れをまとめる

  1. Sniffer().sniff()メソッドで設定を判定するが、このとき、判定のためにファイルの一部を読み込む

  2. ファイルの先頭に戻る

  3. Snifferで判定した設定を使って読み込む

この記事が気に入ったらサポートをしてみませんか?