Was ist die pythonischste Methode, um alle Zeilen mehrerer Dateien zu durchlaufen?

Ich möchte viele Dateien so behandeln, als wären sie alle eine Datei. Was ist der richtige pythonische Weg, um [Dateinamen] => [Dateiobjekte] => [Zeilen] mit Generatoren zu verbinden / keine ganze Datei in den Speicher zu lesen?

Wir alle kennen den richtigen Weg, um eine Datei zu öffnen:

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

Und wir kennen den richtigen Weg, um mehrere Iteratoren / Generatoren zu einem langen zu verbinden:

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

Aber wie verbinde ich mehrere Dateien und behalte die Kontextmanager bei?

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

Ich könnte die Kontextmanager ignorieren und so etwas tun, aber es fühlt sich nicht richtig an:

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

Oder ist das so wasAsync IO - PEP 3156 ist für und ich werde später nur auf die elegante Syntax warten müssen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage