Frage von nilsiscool, 79

Python liste schneiden und aus dieser eine weitere liste erstellen?

Guten Morgen,

ich habe eine .txt datei welche sinnesgemäß eine solche Struktur aufweist: (Knapp 400 Zeilen)

Datum Uhrzeit Name Baureihenabfolge

01.0.2016 15:30 Max Meyer (Golf7/Golf6)(AudiTT)(Mercedes C Klasse)

nun interessiert mich nur der letzte Teil (Baureihenabfolge).

Der Algorithmus soll nun eine List erstellen mit der Baureihenabfolge, also so:

list 1 = [Golf7/Golf6, Audi TT, Mercedes C Klasse].

Genau das gleiche soll er auch für die nächsten 400 Zeilen machen, dementsprechend also 400 Listen erzeugen.

Danke für die Unterstützung

PS: die einzelnen Daten ( Datum, Uhrzeit, Name etc. ) sind jeweils durch ein Tab getrennt

Antwort
von ralphdieter, 39

So gehst Du zeilenweise über die Daten:

for line in open("data.txt") ...

So extrahierst Du den letzten Teil einer Zeile:

br = line.rsplit('\t', 1)[-1]

So zerlegst Du die Klammer-Texte in eine Liste:

br_list = br.strip(')(').split(')(')

Der String ")(" als einziges Argument sieht schon etwas komisch aus; vielleicht hilft's, wenn man dafür extra eine Variable anlegt:

delim = ')('
br_list = br.strip(delim).split(delim)

Und jetzt alles zusammen:

alle_br = [ line.rsplit('\t', 1)[-1].strip(')(').split(')(')
 for line in open("data.txt") ]

Alles natürlich ungetestet und ohne Gewähr!

Kommentar von nilsiscool ,

Erstmal danke für deine Antwort. Beim dritten code komme ich nicht weiter. er zeigt mir an, dass list kein attribut strip oder split beinhaltet.

er versucht ja auch eine Liste zu splitten und zu strippen, das kann er doch aber nur mit strings oder?

Kommentar von ralphdieter ,

line.rsplit() liefert eine Liste von Strings. [-1] nimmt daraus das letzte Element. Das sollte eigentlich wieder ein String sein.

Kommentar von ralphdieter ,

Ach ja: Du brauchst nur die letzte Zeile (alle_br=...). Die Zeilen davor dienen bloß zur Erklärung.

Kommentar von TeeTier ,

Schicke Lösung, genau mein Gedankengang! :)

Ich hatte schon befürchtet, dass hier nur wieder RegExen oder die Zeichenweise Abarbeitung mittels Schleifen zum Einsatz kommen.

Antwort
von Rhayn, 26

Könnte dir das im Java code anbieten (ob das richtig ist weiß ich nicht kann sein das ich nen Denkfehler hatte), dann könntest du ihn dir vielleicht in den Python-code umschreiben.

String DeinText="01.0.20.16 15:30 Max Meyer (Golf7/Golf6)(AudiTT)(Mercedes C Klasse)..............";
int g,d,f=0;
List list1 = new ArrayList();
String[] beispiel = new String[400];

for (int i=0;i<DeinText.length;i++)
{
do {
if(DeinText.charAt(i)!="(")
{i++;}
else
{i++; d++;}
}while (d!=1);
d=0;
do {
if(DeinText.charAt(g)!=")")
{g++;}
else
{g++;d++;}
}while (d!=1);
beispiel[f]=DeinText.substring(i,g);
list1.add(beispiel[f]);
d=0;
i=g;
g=g++;
System.out.println(list1.get(beispiel[f]));
f++;
}

PS: Hab das nicht überprüft keine Garantie das es klappt. Ich habe mir lediglich etwas überlegt und es in den Editor geschrieben.

PS:PS: Es kann durchaus sein das ich dort nur schwachsinn geschrieben habe. Bitte nehmt es mir nicht übel.

MFG -Rhayn-

Keine passende Antwort gefunden?

Fragen Sie die Community