Python-data-persistence-csv-module

提供:Dev Guides
移動先:案内検索

Pythonデータの永続性-CSVモジュール

  • CSVはカンマ区切りの値を表します*。 このファイル形式は、データベースのスプレッドシートやデータテーブルとの間でデータをエクスポート/インポートするときに一般的に使用されるデータ形式です。 csvモジュールは、PEP 305の結果としてPythonの標準ライブラリに組み込まれました。 PEP 305の推奨事項に従って、CSVファイルで読み取り/書き込み操作を実行するためのクラスとメソッドを示します。

CSVは、MicrosoftのExcelスプレッドシートソフトウェアで推奨されるエクスポートデータ形式です。 ただし、csvモジュールは他の方言で表されるデータも処理できます。

CSV APIインターフェイスは、次のライターおよびリーダークラスで構成されています-

writer()

csvモジュールのこの関数は、データを区切り文字列に変換してファイルオブジェクトに格納するライターオブジェクトを返します。 この関数には、パラメーターとして書き込み権限を持つファイルオブジェクトが必要です。 ファイルに書き込まれたすべての行は、改行文字を発行します。 行間にスペースが追加されないようにするには、newlineパラメータを に設定します。

ライタークラスは以下のメソッドを持っています-

writerow()

このメソッドは、項目をコンマ文字で区切って反復可能(リスト、タプル、または文字列)に書き込みます。

writerows()

このメソッドは、パラメータとして反復可能オブジェクトのリストを取り、各項目をファイル内の項目のコンマ区切り行として書き込みます。

次の例は、writer()関数の使用方法を示しています。 まず、ファイルが「w」モードで開かれます。 このファイルは、ライターオブジェクトを取得するために使用されます。 タプルのリスト内の各タプルは、writerow()メソッドを使用してファイルに書き込まれます。

import csv
   persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   csvfile=open('persons.csv','w', newline='')
   obj=csv.writer(csvfile)
   for person in persons:
      obj.writerow(person)
csvfile.close()

出力

これにより、現在のディレクトリに「persons.csv」ファイルが作成されます。 以下のデータが表示されます。

Lata,22,45
Anil,21,56
John,20,60

リストを反復して各行を個別に書き込む代わりに、writerows()メソッドを使用できます。

csvfile=open('persons.csv','w', newline='')
persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   obj=csv.writer(csvfile)
   obj.writerows(persons)
   obj.close()

読者()

この関数は、* csvファイル*の行の反復子を返すリーダーオブジェクトを返します。 通常のforループを使用すると、ファイル内のすべての行が次の例に表示されます-

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   for row in obj:
      print (row)

出力

['Lata', '22', '45']
['Anil', '21', '56']
['John', '20', '60']

リーダーオブジェクトはイテレータです。 したがって、* forループ*の代わりにcsvファイルのすべての行を表示するために使用できるnext()関数をサポートします。

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   while True:
   try:
      row=next(obj)
      print (row)
   except StopIteration:
      break

前述のように、csvモジュールはデフォルトの方言としてExcelを使用します。 csvモジュールは方言クラスも定義します。 方言は、CSVプロトコルの実装に使用される一連の標準です。 利用可能な方言のリストは、list_dialects()関数で取得できます。

>>> csv.list_dialects()
['excel', 'excel-tab', 'unix']

イテラブルに加えて、csvモジュールはディクショナリオブジェクトをCSVファイルにエクスポートし、それを読み取ってPythonディクショナリオブジェクトに入力できます。 この目的のために、このモジュールは次のクラスを定義します-

DictWriter()

この関数は、DictWriterオブジェクトを返します。 ライターオブジェクトに似ていますが、行はディクショナリオブジェクトにマップされます。 この関数には、書き込み権限のあるファイルオブジェクトと、フィールド名パラメーターとして辞書で使用されるキーのリストが必要です。 これは、ファイルの最初の行をヘッダーとして書き込むために使用されます。

writeheader()

このメソッドは、ファイルの最初の行としてコンマ区切りの行としてキーのリストを辞書に書き込みます。

次の例では、辞書項目のリストが定義されています。 リストの各項目は辞書です。 writrows()メソッドを使用して、カンマ区切りの方法でファイルに書き込まれます。

persons=[
   {'name':'Lata', 'age':22, 'marks':45},
   {'name':'Anil', 'age':21, 'marks':56},
   {'name':'John', 'age':20, 'marks':60}
]
csvfile=open('persons.csv','w', newline='')
fields=list(persons[0].keys())
obj=csv.DictWriter(csvfile, fieldnames=fields)
obj.writeheader()
obj.writerows(persons)
csvfile.close()

Persons.csvファイルは次の内容を示しています-

name,age,marks
Lata,22,45
Anil,21,56
John,20,60

DictReader()

この関数は、基になるCSVファイルからDictReaderオブジェクトを返します。 リーダーオブジェクトの場合、これはイテレータでもあり、ファイルのコンテンツが取得されます。

csvfile=open('persons.csv','r', newline='')
obj=csv.DictReader(csvfile)

このクラスはfieldnames属性を提供し、ファイルのヘッダーとして使用される辞書キーを返します。

print (obj.fieldnames)
['name', 'age', 'marks']

DictReaderオブジェクトに対してループを使用して、個々のディクショナリオブジェクトをフェッチします。

for row in obj:
   print (row)

これは次の出力になります-

OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
OrderedDict([('name', 'Anil'), ('age', '21'), ('marks', '56')])
OrderedDict([('name', 'John'), ('age', '20'), ('marks', '60')])

OrderedDictオブジェクトを通常の辞書に変換するには、まずコレクションモジュールからOrderedDictをインポートする必要があります。

from collections import OrderedDict
   r=OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
   dict(r)
{'name': 'Lata', 'age': '22', 'marks': '45'}