2016-07-22 43 views
0

我只需要幫助您如何一次使用X行。Python27如何批量讀取字典來執行命令

我有一個任務來解析10000行csv文件 - >將其轉換爲字典 - >然後一次處理100行進行API調用。對於這個例子,我們只需輸出到print函數。我將需要每100或更少的時間執行,因爲一些嵌套字典不會精確到100,因此代碼需要靈活。即時通訊使用python2.7沒有像美麗sup等花哨的額外模塊我被給了api_worker for循環代碼塊來幫助我完成這項任務,但不知道如何讓它工作。我在哪裏放置打印(稍後用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