Schnellste Weg, um entfernen die ersten und die letzten Zeilen aus einem Python-string
Habe ich ein python-script, dass aus verschiedenen Gründen, ist eine variable, die einen relativ großen string, sagen wir 10 MB lang. Dieser string enthält mehrere Zeilen.
Was ist der Schnellste Weg, um entfernen Sie die erste und Letzte Zeile dieses Strings? Aufgrund der Größe der Zeichenfolge, je schneller die operation, desto besser; es ist ein Schwerpunkt auf Geschwindigkeit. Das Programm liefert eine etwas kleinere Zeichenfolge, sans, die ersten und letzten Zeilen.
'\n'.join(string_variable[-1].split('\n')[1:-1])
ist der einfachste Weg, dies zu tun, aber es ist extrem langsam, da die split () - Funktion kopiert das Objekt im Speicher, und die join () - kopiert es wieder.
Beispiel-string:
*** START OF DATA ***
data
data
data
*** END OF DATA ***
Extra credit: Habe dieses Programm nicht ersticken, wenn es keine Daten zwischen; dies ist optional, da für meinen Fall sollte es kein string mit keine Daten zwischen.
- Haben Sie Kontrolle darüber, wie Sie die Zeichenfolge in Ihr Programm, wie zB: machst du
my_string = file_obj.read()
zum abrufen der string? Auch, müssen Sie alle Zeilen, die im Speicher vorhanden, oder ist nur eine Zeile in einer Zeit, okay?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste split bei
'\n'
einmal und prüfen Sie dann, ob der string am letzten index enthält'\n'
wenn jastr.rsplit
bei'\n'
einmal und wählen Sie das Element bei index 0. andernfalls wird ein leerer string zurückgegeben:Oder nicht aufgeteilt, an alle, finden den index der
'\n'
von beiden enden und schneiden Sie die Zeichenfolge:Betrachten einen string s, das ist etwas wie dieses:
Den folgenden code...
...erzeugt die Ausgabe:
Sind, und somit ist der kürzeste code zum entfernen der ersten und der letzten Zeile einen string. Ich glaube nicht, dass die .finden und .rfind-Methoden tun nichts, aber die Suche nach einer bestimmten Zeichenfolge. Probieren Sie die Geschwindigkeit!
Abhängig von der Art und Weise, dass Ihre Nutzung Fall verbrauchen wird der string, der schnellere Weg, um es zu entfernen kann, indem nicht es zu entfernen.
Wenn Sie planen, um den Zugriff auf die Zeilen in der Zeichenfolge nacheinander können Sie bauen einen generator, der das überspringen der ersten und der letzten Zeile, während die nachgeben, jede Zeile als konsumiert wird, eher als der Bau einer neuen Reihe von Kopien aller Linien insgesamt.
Einer ad-hoc-Weise zu vermeiden, die erste und die Letzte Zeile ist die Iteration über die saite, ohne dass unnötige Kopien ist durch die Verfolgung von drei weiteren Linien und nur die Rückgabe der 2. ein, so wird die iteration abschließen wird vor erreichen der letzten Zeile, ohne zu wissen, die position von der letzten Zeile Pause.
Folgende Funktion sollte geben Sie die gewünschte Ausgabe:
Kippe Sie testen es mit:
Wird die Ausgabe erzeugt:
Beachten Sie, dass der größte Vorteil von diesem Ansatz ist, dass nur eine neue Zeile an der Zeit und nehmen praktisch keine Zeit zum generieren der ersten Zeile der Ausgabe (statt zu warten, bis alle Zeilen gefunden werden, bevor Sie fortfahren), aber, wieder, das kann nützlich sein oder nicht, je nach Ihrem Anwendungsfall.
Andere Methode ist das aufteilen der Daten auf Zeilenumbrüche und dann wieder alles, aber die erste und die Letzte Zeile:
Dies funktioniert gut mit keine Daten: