我只需要帮助了解如何一次使用 X 行。
我有一个解析10000行csv文件的任务 - >将其转换为字典 - >然后一次处理100行进行API调用。对于此示例,我们只需输出到 打印 功能。我将需要每100或更少执行一次,因为一些嵌套字典将不会完全达到每个100,因此代码需要灵活。我使用python2.7没有像美丽的sup等花哨的额外模块。我得到了 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 :(得分: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)
答案 1 :(得分: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
替换那个列表print ''.join(map(repr, rows))
,当然你可以在任何地方插入一个睡眠。)