以下は、辞書のリストを取り出してCSVファイルに書き込むコードです。Python CSVモジュールを使用して、毎回同じ順序で列を保持するCSVに書き込む
import csv
def createBaselineCSV(baselineDictionaryList, name):
toCSV = baselineDictionaryList
keys = toCSV[0].keys()
print(keys)
with open(name, 'w') as output_file:
dict_writer = csv.DictWriter(output_file, fieldnames=keys)
dict_writer.writeheader()
dict_writer.writerows(toCSV)
contacts = [{'Name':'John Smith', 'Email':'[email protected]', 'Phone':'888-888-8888'}, {'Name':'Keith Stone', 'Email':'[email protected]', 'Phone':'000-000-000'}]
createBaselineCSV(contacts, 'contacts.csv')
ただし、作成されたCSVファイルの列は、新しいスプレッドシートが作成されるたびに一貫した形式を維持しません。それはこのようになりますCSVになるかもしれない
Name, Email, Phone
John Smith, [email protected], 888-888-8888
Keith Stone, [email protected], 000-000-0000
次回:だから、1時間、それは次のようになりますCSV作成することがあります
Email, Phone, Name
[email protected], 888-888-8888, John Smith
[email protected], 000-000-0000, Keith Stone
を確実にする良い方法はありますが、その毎回固定位置にある列セルを使用してCSVが作成されますか?たとえば、列Aは常に「名前」、列Bは常に「電子メール」、列Cは常に「電話」です。
これは、関数内のコードを再フォーマットするのではなく、辞書のリスト以外の異なるデータ型(辞書が指定された順序を維持しないため)でcreateBaselineCSVを呼び出すことを意味すると思います。最善のアプローチは何でしょうか?
はDictWriterを使用するか、またはあなたがしなければならない場合collections.OrderedDictを使用しないでください。辞書は本質的に命令されていません。 –