Seite 1 von 1

Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 16:12
von api
Hallo zusammen,

ich habe folgende Zeile:

Code: Alles auswählen

  line = "S    | -f <dir>     | /home/hte4993/tmp/pevtest2    | f1.txt,f2.txt,f3.dat  | 12345"
Die einzelnen Abschnitte möchte ich nun in einzelne Variablen packen. Das mache ich bisher so:

Code: Alles auswählen

type, option, directory, file, number = line.split("|")
Was aber noch stört, sind die Leerzeichen, die jetzt die einzelnen Variablen-Inhalte umgeben. Das könnte man ja per

Code: Alles auswählen

type = type.strip() ...
wegbekommen, aber geht das auch eleganter? Eventuell bereits beim Zerlegen?

Gruß
API

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 16:36
von Sirius3
@api: mit regulären Ausdrücken:

Code: Alles auswählen

line = "S    | -f <dir>     | /home/hte4993/tmp/pevtest2    | f1.txt,f2.txt,f3.dat  | 12345"
type, option, directory, file, number = re.split('\s*\|\s*', line)

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 16:51
von Daikoku
Eine weitere Möglichkeit wäre, vor dem line.split('|') den string schon zu bereinigen.

Code: Alles auswählen

line = ''.join("S    | -f <dir>     | /home/hte4993/tmp/pevtest2    | f1.txt,f2.txt,f3.dat  | 12345".split())
type, option, directory, file, number = line.split("|")

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 16:56
von api
@Sirius3: An sich eine gute Möglichkeit - funktioniert auch. Ich habe nur beim Aufschreiben meines Problems einen kleinen Fehler gemacht, der sich allerdings negativ auswirkt.

Der String lautet in Wirklichkeit:

Code: Alles auswählen

line = "   S    | -f <dir>     | /home/hte4993/tmp/pevtest2    | f1.txt,f2.txt,f3.dat  | 12345"
Also vor dem ersten Wert (S) sind auch noch Leerzeichen. Und die werden bei deiner Lösung nun nicht weggeputzt.

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 17:01
von api
@Daikoku: Das funktioniert so leider nicht. Bei deiner Lösung sind alle Leerzeichen weg - auch die innerhalb der Werte. Zum Beispiel aus "-f <dir>" wird dann "-f<dir>". :(

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 17:09
von Daikoku
@api was mir noch aufgefallen ist. Du überschreibst mit type und file Python builtin Funktionen, also eingebaute Funktionen.
Wenn das gewollt ist fein, wenn nicht, solltest Du Dir andere Namen überlegen.

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 17:13
von api
@Daikoku: :shock: Da hast du natürlich Recht !! Das werde ich ändern... Danke für den Hinweis, habe ich überhaupt nicht dran gedacht...

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 17:14
von Sirius3
@api: Leerzeichen am Anfang und Ende kann man mit strip beseitigen.

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 17:18
von api
@Sirius3: Ich habe jetzt erstmal eine Kombination gewählt - die auch schon recht gut ist und auf jeden Fall funktioniert:

Code: Alles auswählen

type, option, directory, file, remus, reason, release_person = re.split('\s*\|\s*', line.strip())

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 17:19
von api
@Sirius3: Sehr gut. Die Lösung gefällt mir. Danke. :D

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 17:32
von snafu

Code: Alles auswählen

map(str.strip, line.split('|'))

Re: Zeile in einzelne Variablen aufteilen

Verfasst: Donnerstag 30. März 2017, 19:52
von api
@snafu: Auch nicht schlecht. Darauf wäre ich nun gar nicht gekommen, obwohl es doch so naheliegend ist. :D

Danke auch.