web-dev-qa-db-ja.com

辞書のリストをファイルに保存するにはどうすればよいですか?

辞書のリストがあります。スクリプトを再起動したときに新しいメッセージが利用されるように、これらの辞書の1つを変更して保存したい場合があります。現時点では、スクリプトを変更して再実行することで、その変更を行います。これをスクリプトから引き出して、辞書のリストをなんらかの構成ファイルに入れたいと思います。

リストを file に書き込む方法についての回答を見つけましたが、これはフラットリストであると想定しています。辞書のリストを使用してどうすればよいですか?

私のリストは次のようになります:

logic_steps = [
    {
        'pattern': "asdfghjkl",
        'message': "This is not possible"
    },
    {
        'pattern': "anotherpatterntomatch",
        'message': "The parameter provided application is invalid"
    },
    {
        'pattern': "athirdpatterntomatch",
        'message': "Expected value for debugging"
    },
]
16
Python Novice

オブジェクトにJSONが処理できるオブジェクトのみが含まれている場合(liststuplesstringsdictsnumbersNoneTrueおよびFalse)、それを json.dump としてダンプできます。

import json
with open('outputfile', 'w') as fout:
    json.dump(your_list_of_dict, fout)
34
mgilson

各辞書を1行にしたい場合:

 import json
 output_file = open(dest_file, 'w', encoding='utf-8')
 for dic in dic_list:
    json.dump(dic, output_file) 
    output_file.write("\n")
5
Reihan_amn

完全を期すために、json.dumps()メソッドも追加します。

_with open('outputfile_2', 'w') as file:
    file.write(json.dumps(logic_steps, indent=4))
_

json.dump()json.dumps()の違いについては、こちらをご覧ください here

4

Dictをファイルに書き込むために従う必要がある方法は、あなたが言及した投稿とは少し異なります。

まず、オブジェクトをシリアル化する必要があり、それを永続化する必要はありません。これらは「ファイルへの書き込みpythonオブジェクト)」のファンシーな名前です。

Pythonには、目的を達成するために使用できる3つのシリアル化モジュールがデフォルトで含まれています。それらは、ピクルス、シェルフ、jsonです。それぞれに独自の特性があり、使用する必要があるのは、プロジェクトにより適したものです。詳細については、各モジュールのドキュメントを確認してください。

データにpythonコードでのみアクセスする場合は、shelveを使用できます。以下に例を示します。

import shelve

my_dict = {"foo":"bar"}

# file to be used
shelf = shelve.open("filename.shlf")

# serializing
shelf["my_dict"] = my_dict

shelf.close() # you must close the shelve file!!!

あなたが行うことができるデータを取得するには:

import shelve

shelf = shelve.open("filename.shlf") # the same filename that you used before, please
my_dict = shelf["my_dict"]
shelf.close()

シェルフオブジェクトを、ディクショナリとほぼ同じように扱うことができることを確認してください。

2
ppalacios