使生成器读取多行

时间:2018-04-04 04:08:12

标签: python file csv keras generator

我有一个非常大的csv文件(11百万行)。

我想创建批量数据。我不能为我的生活弄清楚如何在生成器中读取n行(我指定n是什么,有时我希望它是50,有时2)。我想出了一个可以工作一次的kluge,但我无法让它再次迭代。发电机对我来说是一个新手,所以我甚至花了一些时间来打电话。 (对于记录,这是一个干净的数据集,每行有29个值)

import numpy as np
import csv

def getData(filename):
    with open(filename, "r") as csv1:
        reader1 = csv.reader(csv1)
        for row1 in reader1:
            yield row1

def make_b(size, file):
    gen = getData(file)
    data=np.zeros((size,29))
    for i in range(size):
        data[i,:] = next(gen)
    yield data[:,0],data[:,1:] 

test=make_b(4,"myfile.csv")
next(test)
next(test)

这样做的原因是使用在keras中批量处理数据的示例。虽然可以使用不同的方法将所有数据存入内存,但我正在尝试向学生介绍从大型数据集批量处理数据的概念。由于这是一个调查课程,我想展示来自大型文本文件的数据批处理,这对于这样的“入门级”任务来说已经证明是令人沮丧的。 (它实际上在tensorflow中更容易,但我使用keras来介绍MLP的高级概念)。

0 个答案:

没有答案