2016-07-22 11 views
0

私はちょうどX行を扱う方法の助けが必要です。Python27コマンドを実行するために辞書を読み込む方法を

私は、10000行のcsvファイルをパーズして辞書に変換してから、一度に100行を処理してAPI呼び出しを行います。この例では、出力をに印刷します。の機能です。いくつかのネストされたディクショナリがそれぞれ100まで正しく動作しないため、100回以下で実行する必要があります。そのため、コードは柔軟にする必要があります。私はapi_workerループコードブロックのためにこのタスクで私を助けてくれましたが、どのように動作させるか考えていませんでした。どこにプリントを置くのですか?(後でAPIコードに置き換えてください)私が今までに試したことは、すべて、何も、またはすべての個々の文字列を印刷します。

import * # assume i have all the right modules 

    def parseCSV(filename): 
     # this i have working 
     return result 

    def api_worker(readerObj): 
     for majorkey in readerObj.keys(): 
      listof100 = [] 
      for idx, line in enumerate(readerObj.get(majorkey)): 
       if (idx+1 % 100) != 0: 
        listof100.append(line) 
       else: 
        print listof100 #tried here makes no difference 
        del listof100[:] 
        listof100.append(line) 
       print listof100 #tried here but outputs all 

    def main(): 
     readerObj = parseCSV('somefile.csv') 
     api_worker(readerObj) 

    if __name__ == '__main__': 
     main() 

例ソース:

が病気不要な多くのコードを切り出し

{'majorkey1': [{'name':'j','age':'3','height':'6feet'}, 
{'name':'r','age':'4','height':'5feet'}, 
{'name':'o','age':'5','height':'3feet'}], 
'majorkey2':[{'name':'n','age':'6','height':'4feet'}, 
{'name':'s','age':'7','height':'7feet'}, 
{'name':'q','age':'7','height':'8feet'}]} 

所望の出力:

この小さなサンプルを使用する場合、および私は一度に2行を印刷したいと思っています。 印刷からは次のようになります。majorkey1グループ

{'name':'j','age':'3','height':'6feet'}{'name':'r','age':'4','height':'5feet'} 

スリープ1秒から

...

{'name':'o','age':'5','height':'3feet'} 

majorkey2グループから

睡眠1秒...

{'name':'n','age':'6','height':'4feet'}{'name':'s','age':'7','height':'7feet'} 

睡眠1秒...

{'name':'q','age':'7','height':'8feet'} 

ヘルプは大歓迎です。

答えて

0

リスト全体をメモリにロードせずに、リストを固定長のチャンクに分割する必要があるようですか?これは、itertoolsモジュールの助けを借りて可能です。これは、Python docsから取られる:

from itertools import izip_longest 

def grouper(iterable, n, fillvalue=None): 
    "Collect data into fixed-length chunks or blocks" 
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx 
    args = [iter(iterable)] * n 
    return izip_longest(fillvalue=fillvalue, *args) 
+0

これはありがとうございます。私はファイルの使用が膨大になるので、リスト全体をメモリにロードしないことに同意します。病気は、この周りに私の頭を包むためにこれで遊んでいます。ありがとう! – New2Python

0

一つの可能​​性:あなたは本当にあなたが上記与えたフォーマットをしたい場合は

from itertools import islice 

d = { 
     'majorkey1': [ 
      { 'name':'j','age':'3','height':'6feet' }, 
      { 'name':'r','age':'4','height':'5feet' }, 
      { 'name':'o','age':'5','height':'3feet' }, 
     ], 
     'majorkey2': [ 
      { 'name':'n','age':'6','height':'4feet' }, 
      { 'name':'s','age':'7','height':'7feet' }, 
      { 'name':'q','age':'7','height':'8feet' }, 
     ], 
} 

n = 2 

for k, v in d.items(): 
    print '{}:'.format(k) 
    it = iter(v) 
    while True: 
     rows = list(islice(it, n)) 
     if len(rows) == 0: 
      break 
     print '\t{}'.format(rows) 

# Output: 
# majorkey1: 
# [{'age': '3', 'name': 'j', 'height': '6feet'}, {'age': '4', 'name': 'r', 'height': '5feet'}] 
# [{'age': '5', 'name': 'o', 'height': '3feet'}] 
# majorkey2: 
# [{'age': '6', 'name': 'n', 'height': '4feet'}, {'age': '7', 'name': 's', 'height': '7feet'}] 
# [{'age': '7', 'name': 'q', 'height': '8feet'}] 

(ところで、あなたはprint ''.join(map(repr, rows))と、そのリストprintを置き換えることができ、そしてもちろん、あなたはあなたが望むところに眠りを入れることができます。)

+0

パーフェクト、ちょうど私が必要なもの、感謝! – New2Python

関連する問題