AttributeError: FileInput-Instanz hat kein Attribut '__exit__'

8

Ich versuche, aus mehreren Eingabedateien zu lesen und die zweite Zeile aus jeder Datei nebeneinander als Tabelle auszugeben

%Vor%

Aber ich bekomme eine "AttributeError: FileInput-Instanz hat kein Attribut ' __exit__ '"

    
Just_Newbie 14.06.2015, 22:13
quelle

2 Antworten

21

Das Problem ist, dass ab Python 2.7.10 das Fileinput-Modul nicht mehr als Context-Manager verwendet werden kann, d. h. die with -Anweisung. Sie müssen also selbst die Sequenz schließen. Folgendes sollte funktionieren:

%Vor%

Beachten Sie, dass Sie dieses Modul in neueren Versionen von Python 3 als Kontextmanager verwenden können.

Für den zweiten Teil der Frage, unter der Annahme, dass jede Datei ähnlich formatiert ist mit einer gleichen Anzahl von Datenzeilen der Form xxxxxx & xxxxx , kann man eine Tabelle der Daten aus der zweiten Spalte jeder Daten wie folgt erstellen:

Beginnen Sie mit einer leeren Liste, um eine Tabelle zu sein, in der die Zeilen Listen von zweiten Spalteneinträgen von jeder Datei sein werden:

%Vor%

Jetzt iteriere über alle Zeilen in der fileinput -Sequenz, benutze fileinput.isfirstline() , um zu prüfen, ob wir uns in einer neuen Datei befinden und mach eine neue Zeile:

%Vor%

Jetzt wird table die Transponierte dessen, was Sie wirklich wollen, nämlich jede Zeile, die die zweiten Spalteneinträge einer gegebenen Zeile jeder Datei enthält. Um die Liste zu transponieren, kann man zip verwenden und dann die transponierte Tabelle über die Zeilen mit der join string-Methode durchlaufen, um jede Zeile mit einem Kommatrennzeichen (oder dem gewünschten Trennzeichen) zu drucken:

%Vor%     
Eric Appelt 14.06.2015, 22:32
quelle
1

Wenn etwas open / close Methoden verwendet, verwenden Sie contextlib.closing :

%Vor%     
kzh 16.10.2017 20:28
quelle

Tags und Links