我有一个将数据加载到数据库中的脚本。我从csv文件中获取数据并返回一个生成器。从生成器生成的值用于构建插入语句,以便一次批量加载最多100K条记录。目前我有一个看起来像这样的函数来构建一个"列表列表":
def split_statements(data_set, num_of_splits):
for i in data_set:
yield list(islice(data_set, num_of_splits))
这适用于1行到数百万行数据,将后者分成100K块。但是我一直在尝试切换到某种类型的生成器/延迟加载函数来处理极大文件的边缘情况。我尝试了以下方法:
response.sendRedirect("welcome.jsp");
当文件中只有一行时,这看起来很笨拙并且不起作用。然而,它在10GB文件上运行良好。
非常感谢任何见解/帮助。
谢谢!
答案 0 :(得分:1)
我怀疑它在10GB文件上真的有效。我不知道您的data_set
,但我认为for i in data_set
将始终从data_set
读取下一个元素,并将其作为i
提供,然后您将其忽略。这可以解释为什么1行文件不起作用。 10GB文件可能也不起作用,并且缺少所有被浪费为i
的行。
演示:
from itertools import islice
it = iter('abcabcabc')
for i in it:
print(list(islice(it, 2)))
输出:
['b', 'c']
['b', 'c']
['b', 'c']