如何在每次调用next()时使用python返回多行?

ssy*_*ssy 4 python generator

你好,我是python的初学者,有一个简单的问题.我被要求编写一个生成器来遍历一个txt文件,文件中的每一行是一个点(x,y,z)的3个坐标如何在每次调用next()时返回5个点(5行)?

这是我的代码,我每次只能生成一行!

import itertools

def gen_points(name):
    f=open(name)
    for l in f:
            clean_string=l.rstrip()
            x,y,z=clean_string.split()
            x= float(x)
            y= float(y)
            z= float(z)
            yield x,y,z
    f.close()

file_name=r"D:\master ppt\Spatial Analysis\data\22.txt"
a=gen_points(file_name)
g=itertools.cycle(a)

print(next(g))
Run Code Online (Sandbox Code Playgroud)

Jea*_*bre 5

等到你的三元组列表中有五个项目,然后产生相反的结果:

def gen_points(name):
    with open(name) as f:
        five_items = []
        for l in f:
            five_items.append(tuple(map(float,l.split())))
            if len(five_items) == 5:
                yield five_items
                # create another empty object
                five_items = []
        if five_items:
            yield five_items
Run Code Online (Sandbox Code Playgroud)

yield在循环结束时,如果不为空,以避免丢失最后元件如果元件的数目是不通过5整除.

旁白:clean_string=l.rstrip()因为split已经处理了换行和诸如此类的东西而没用.