Найти - Пользователи
Полная версия: Помогите с yield
Начало » Python для новичков » Помогите с yield
1
bs0d
Имеется директория, в которой лежит определенное кол-во файлов, содержимое которых - ссылки.
Необходимо получить содержимое этих файлов, и каждый раз при вызове функции возвращать список, содержащий по одной строке из каждого файла (первый вызов - вывод первых строк из всех файлов, второй вызов - вывод вторых строк и т.д.)
Кол-во строк в файлах - всегда одинаковое. Если доходим до конца файла (получаем StopIteration ?) - начинаем заново

def get_links():
    dir = 'links'
    dir_list = os.listdir(dir)
    links = []
    for x in dir_list:
        with open(os.path.join(dir, x)) as f:
            links.append(f.read().splitlines())
    for x in links:
        for y in links:
            yield (y)

    a = get_links()
    while 1:
        print(next(a))
Выводит только 5 раз
Понимаю, почему это происходит, но хз как решить. Как же правильно пользоваться yield? Или может кто предложит другой путь решения.
Isem
bs0d
for x in links: for y in links:
Может надо
for x in links: 
    for y in x:
?
Isem
Если убрать лишнее, то примерно получится:
def get_links():
    dir = 'links'
    dir_list = os.listdir(dir)
    for x in dir_list:
        with open(os.path.join(dir, x)) as f:
            yield from f.read().splitlines() 
print( *get_links() )
py.user.next
import itertools
 
def f(fnames):
    clst = []
    for i in fnames:
        clst.append(itertools.cycle(open(i, encoding='utf-8')))
    for i in zip(*clst):
        yield i
 
gen = f(('/etc/passwd', '/etc/fstab'))
for i in range(100):
    print(next(gen))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB