Ich lese eine Datei und entpacke jede Zeile wie folgt:
%Vor% Es ist jedoch möglich, dass die Zeile mehr oder weniger Spalten enthält als die Variablen, die ich entpacken möchte. In dem Fall, wenn es weniger gibt, möchte ich None
den dangling Variablen zuweisen, und wenn es mehr gibt, möchte ich sie ignorieren. Was ist der idiomatische Weg, dies zu tun? Ich benutze Python 2.7.
In Python 3 können Sie dies verwenden
%Vor%Bearbeiten
Für große Strings empfehle ich, maxsplit
-argument für split zu verwenden (dieses Argument funktioniert auch in py2.7):
Warum 5? Andernfalls würde das vierte Element den gesamten Rest der Zeile enthalten.
Edit2 Es ist 4 ... Es stoppt nach 4 Teilen, nicht 4 Elementen
Überlegen Sie zuerst, warum Sie das tun wollen.
Wenn Sie jedoch (1) mit None
padieren und (2) zusätzliche Variablen ignorieren möchten, ist der Code einfach:
Offensichtlich muss die magische Zahl mit der Anzahl der Variablen übereinstimmen. Dadurch wird das, was Sie haben, mit der magischen Zahl erweitert und dann auf diese Länge zurückgeschnitten.
Für ein beliebiges iterables können Sie Folgendes tun:
%Vor%Dies ist das selbe Pad-and-Slice mit itertools.
Sie müssen möglicherweise eine Klasse erstellen und line.split () als Liste übergeben.
Sie können diese Klasse überschreiben lassen [], aber ich empfehle das nicht. Ich würde self.get_at (self, i) definieren und das Element am Index zurückgeben, oder None, wenn & gt; = len (contents).
Sie können auch eine Funktion definieren, die IndexError abfängt und für eine Liste und einen Index None zurückgibt.
%Vor%Es ist nicht der sauberste Code, und stattdessen würde ich nur die Verwendung von line.split () empfehlen und die Logik manuell behandeln, abhängig davon, was Sie mit den nachfolgenden Variablen und der Länge der Liste machen.
So etwas funktioniert für jeden iterierbaren / Iterator. Wenn Sie immer eine Liste weitergeben, können Sie den islice
-Teil entfernen.
Tags und Links python iterable-unpacking