Какой самый питонный способ перебрать все строки нескольких файлов?

Я хочу рассматривать многие файлы, как если бы они были одним файлом. Какие'правильный питонический способ взять [filenames] => [файловые объекты] => [линии] с генераторами / не читает весь файл в память?

Мы все знаем, как правильно открыть файл:

with open("auth.log", "rb") as f:
    print sum(f.readlines())

И мы знаем, как правильно связать несколько итераторов / генераторов в один длинный:

>>> list(itertools.chain(range(3), range(3)))
[0, 1, 2, 0, 1, 2]

но как связать несколько файлов вместе и сохранить менеджеры контекста?

with open("auth.log", "rb") as f0:
    with open("auth.log.1", "rb") as f1:
        for line in itertools.chain(f0, f1):
            do_stuff_with(line)

    # f1 is now closed
# f0 is now closed
# gross

Я мог бы игнорировать менеджеры контекста и сделать что-то подобное, но это не такчувствую себя хорошо:

files = itertools.chain(*(open(f, "rb") for f in file_names))
for line in files:
    do_stuff_with(line)

Или это что то типаАсинхронный ввод-вывод - PEP 3156 для и яПридется ли ждать элегантный синтаксис позже?

Ответы на вопрос(1)

Ваш ответ на вопрос