Форум сайта python.su
Имеется директория, в которой лежит определенное кол-во файлов, содержимое которых - ссылки.
Необходимо получить содержимое этих файлов, и каждый раз при вызове функции возвращать список, содержащий по одной строке из каждого файла (первый вызов - вывод первых строк из всех файлов, второй вызов - вывод вторых строк и т.д.)
Кол-во строк в файлах - всегда одинаковое. Если доходим до конца файла (получаем 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))
Офлайн
bs0dМожет надо
for x in links: for y in links:
for x in links: for y in x:
Офлайн
Если убрать лишнее, то примерно получится:
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() )
Офлайн
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))
Офлайн