Question

Je travaille sur le problème suivant.Disons que j'ai des données (disons les valeurs d'image RVB comme entiers) dans un fichier par ligne.Je souhaite lire 10000 de ces lignes et faire un objet de cadre (cadre d'image contenant 10000 valeurs RVB) et l'envoyer à la fonction en aval dans le pipeline de traitement.Ensuite, lisez ensuite les 10000 lignes suivantes et faites un autre objet de trame et envoyez-la à la fonction en aval du pipeline.

Comment puis-je configurer cette fonction qu'elle continue à faire des objets de cadre jusqu'à atteindre la fin du fichier.Est la suivante la bonne façon de le faire?Y a-t-il d'autres approches soignées?

class frame_object(object):
    def __init__(self):
            self.line_cnt  = 0
            self.buffer = []

    def make_frame(line):
        if(self.line_cnt < 9999):
            self.buffer.append(line)
        return self.buffer

Était-ce utile?

La solution

Vous pouvez utiliser des générateurs pour créer un pipeline de données comme dans l'exemple suivant:

FRAME_SIZE = 10000


def gen_lines(filename):
    with open(filename, "r") as fp:
        for line in fp:
            yield line[:-1]


def gen_frames(lines):
    count = 0
    frame = []

    for line in lines:
        if count < FRAME_SIZE:
            frame.append(line)
            count += 1

        if count == FRAME_SIZE:
            yield frame
            frame = []
            count = 0

    if count > 0:
        yield frame


def process_frames(frames):
    for frame in frames:
        # do stuff with frame
        print len(frame)


lines = gen_lines("/path/to/input.file")
frames = gen_frames(lines)
process_frames(frames)

De cette façon, il est plus facile de voir le pipeline de données et de connecter différentes logiques de traitement ou de filtrage.Vous pouvez en apprendre davantage sur les générateurs et leur utilisation dans les pipelines de traitement de données ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top