0

ScraperWiki にデータを保存するための簡単な Python スクリプトを次に示します。

import scraperwiki
scraperwiki.sqlite.save(unique_keys=["a"], data={"a":1, "b":"Foo"})
scraperwiki.sqlite.save(unique_keys=["a"], data={"a":1, "c":"Bar"})

結果は、データストア内の次のテーブルです。

a  b  c
1     Bar

2 番目のコマンドでは、行 1 の "b" 列の内容を空白にすることをsqlite.save指定していなかったため、これは面倒です。つまり、私の目的の結果は、データストア:"b":""

a  b    c
1  Foo  Bar

だから私の質問は: ScraperWiki データストアに連続した「保存」操作を使用する場合、上で概説したような結果を達成するために、既存のデータを上書きせずにデータを追加する最良の方法は何ですか?

4

2 に答える 2

0

この問題に対する私の解決策は、一連の保存操作を、辞書の Python 辞書への連続した変更に置き換えることでした。つまり、データストアの目的のコンテンツの行ごとに 1 つのサブ辞書です。辞書のリストではなく辞書の辞書を使用すると、関連するサブ辞書への書き込みが簡単になりますが、2 つの小さな問題があります。

  • 辞書で一意のキーを複製します。
  • Scraperwiki データストア (IIUC) は前者の構造を受け入れず、後者を受け入れるため、データストアに保存する前に辞書の辞書から辞書のリストを生成する必要があります。

注意。かなりの数のデータ行の場合、辞書のリストを 1 回の操作でデータストアに保存する方が、それらの辞書を繰り返し処理して一度に 1 つずつデータストアに保存するよりもはるかに高速です。

コード例:

import scraperwiki
superdictionary = {}
superlist       = []
superdictionary['1'] = {"a":1, "b":"Foo"}
superdictionary['1'].update({"c":"Bar"})
superdictionary['2'] = {"a":2, "b":"Grue", "c":"Gnu"}

for subdictionary in superdictionary:
    superlist.append(superdictionary[subdictionary])
scraperwiki.sqlite.save(["a"], superlist)

生成する必要があります:

a  b     c
1  Foo   Bar
2  Grue  Gnu
于 2013-05-07T19:37:32.717 に答える