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オブジェクトを用意する
writerow()メソッドを使う
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)
少し手順としてはクセがあるが、自動で設定を判定してくれるので便利。以下に流れをまとめる
Sniffer().sniff()メソッドで設定を判定するが、このとき、判定のためにファイルの一部を読み込む
ファイルの先頭に戻る
Snifferで判定した設定を使って読み込む
この記事が気に入ったらサポートをしてみませんか?