データ処理において、CSVやJSONは最も一般的なファイル形式の2つです。Pythonには、これらのファイル形式を効率的に読み書きするための標準モジュールが用意されています。本記事では、csv、jsonモジュールの基本的な操作方法を解説します。
csv
reader/writer
CSVの操作として基本的なファイルへの書き込み・読み取り操作を解説します。
・csv.reader()では、CSVファイルを1行ごとにリスト形式で読み込みます。
・csv.writer()では、writerow(s)(list)で書き込みを行うことができます。
import csv
# csvへの書き込み
with open('test.csv',mode='w',newline='',encoding='utf-8') as f:
writer=csv.writer(f)
writer.writerow(['first-name','last-name','age'])
writer.writerows([['suzuki','ichiro',50],
['yamada','hanako',40],
['sato','jiro',30]])
# csv読み込み
with open('test.csv',mode='r')as f:
reader=csv.reader(f)
for row in reader:
print(row)
# >>> ['first-name', 'last-name', 'age']
# >>> ['suzuki', 'ichiro', '50']
# >>> ['yamada', 'hanako', '40']
# >>> ['sato', 'jiro', '30']
DictReader/DictWriter
・csv.DictReader()では辞書形式でデータを読み込みます。キー情報はヘッダーになります。
・csv.Dictwriter()では、辞書形式でデータを書き込みます。Fieldnames=ヘッダー情報を定義しておき、writeHeader()書き込みが行えます。
# csv書き込み(Dictwriter)
data=[
{'first-name':'suzuki','last-name':'ichiro','age':50},
{'first-name':'yamada','last-name':'hanako','age':40},
{'first-name':'sato','last-name':'jiro','age':30}
]
with open('test2.csv',mode='w',newline='',encoding='utf-8')as f:
fieldnames=['first-name','last-name','age']
writer=csv.DictWriter(f,fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
# csv読み込み(Dictredear)
with open('test2.csv',mode='r',encoding='utf-8')as f:
reader=csv.DictReader(f)
for row in reader:
print(row)
# >>> {'first-name': 'suzuki', 'last-name': 'ichiro', 'age': '50'}
# >>> {'first-name': 'yamada', 'last-name': 'hanako', 'age': '40'}
# >>> {'first-name': 'sato', 'last-name': 'jiro', 'age': '30'}
json
dumps/loads
jsonの基本的な操作として、jsonファイルの書き込みと読み取り操作を解説します。
・dumps()とloads()はファイルオブジェクトは扱いません。
・dumps()でjsonに変換したオブジェクトはPythonでは文字列として扱われます。
import json
# Json書き込み(dumps)
data = [
{"first-name": "suzuki", "last-name": "ichiro", "age": 50},
{"first-name": "yamada", "last-name": "hanako", "age": 40},
{"first-name": "sato", "last-name": "jiro", "age": 30},
]
print(json.dumps(data, indent=4, sort_keys=False))
# >>> [
# >>> {
# >>> "first-name": "suzuki",
# >>> "last-name": "ichiro",
# >>> "age": 50
# >>> },
# >>> {
# >>> "first-name": "yamada",
# >>> "last-name": "hanako",
# >>> "age": 40
# >>> },
# >>> {
# >>> "first-name": "sato",
# >>> "last-name": "jiro",
# >>> "age": 30
# >>> }
# >>> ]
# Json読み込み(loads)
json_data = '[{"first-name": "suzuki", "last-name": "ichiro", "age": 50}, {"first-name": "yamada", "last-name": "hanako", "age": 40}, {"first-name": "sato", "last-name": "jiro", "age": 30}]'
print(json.loads(json_data))
# >>> [{'first-name': 'suzuki', 'last-name': 'ichiro', 'age': 50}, {'first-name': 'yamada', 'last-name': 'hanako', 'age': 40}, {'first-name': 'sato', 'last-name': 'jiro', 'age': 30}]
dump/load
・json.load(file)で、jsonファイルを読み込みます。オブジェクトは辞書として、配列はリストとして読み込まれます。
・json.dump(data,file,indent)で、辞書やリストをJson形式で書き込みます。
# jsonファイル書き込み(dump)
with open("test.json", mode="w", encoding="utf-8") as f:
json.dump(data, f, indent=4)
# jsonファイル読み込み(load)
with open("test.json", mode="r", encoding="utf-8") as f:
print(json.load(f))
# >>> [{'first-name': 'suzuki', 'last-name': 'ichiro', 'age': 50}, {'first-name': 'yamada', 'last-name': 'hanako', 'age': 40}, {'first-name': 'sato', 'last-name': 'jiro', 'age': 30}]