String wird in 2 Zeilen geschrieben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ide
User
Beiträge: 15
Registriert: Mittwoch 5. November 2014, 14:50

Hi

ich habe folgenden String in einer Textdatei: "10001stk01-U-0"

ich möchte von diesem nun einmal den ersten teil --> "10001stk01" in nummer speichern und den letzen teil --> "0" in color.
Der mittlere Teil "-U-" wird nicht benötigt.

die beiden Teile ( nummer und color ) möchte ich anschließen in einer Url einfügen

hier mein code (Datei lesen und schreiben habe ich weggelassen)

Code: Alles auswählen

for line in datei:
    a = 1
    for i in line:
        if i == "U":
            nummer = line[:(a-2)]
            color = line[(a+1):]
        a += 1
    pfad = "http://test.de/P/"+color+"/"+nummer+".gif"
    print(pfad)
Es klappt auch alles soweit bis auf das meine Ausgabe nicht ein String ist sondern eine Ausgabe über zwei Zeilen:

http://test.de/P/0
/10001stk01.gif

Was kann ich machen das ich es so habe:

http://test.de/P/0/10001stk01.gif

Vielen Dank
BlackJack

@ide: Dein Problem ist das Du nicht '10001stk01-U-0' in der Textdatei hast sondern '10001stk01-U-0\n'. Da steht am Zeilenende eine Zeilenendezeichen. Das müsstest Du entfernen wenn es nicht in der weiteren Verarbeitung in die URL übernommen werden soll. Eine Möglichlkeit dafür wäre die `rstrip()`-Methode auf Zeichenketten.

Die innere ``for``-Schleife ist reichlich umständlich, das kann man auch mit der `split()`- oder der `partition()`-Methode lösen (ungetestet):

Code: Alles auswählen

    delimiter = '-U-'
    for line in lines:
        colour, middle, number = line.rstrip().partition(delimiter)
        assert middle == delimiter and colour and number
        url = 'http://test.de/P/{0}/{1}.gif'.format(colour, number)
        print(url)
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@ide: Ich würde es so machen:

Code: Alles auswählen

color, number = line.rstrip().split('-U-')
`rstrip` löscht Whitespace (also Leerzeichen, Newline-Zeichen und Tabs) vom rechten Ende des Strings (daher das "r").

`split` "zerstückelt" den String am angegebenen Teilstring (bei dir das "-U-"). So kommen in deinem Fall immer 2 Stücke als Ergebnis raus. Die werden dann in einem Rutsch an die beiden Namen gebunden. Vorsicht: Wenn mehrere "-U-" in einer Zeile vorkommen, dann kommt es zu einem Fehler, weil dann mehr Stücke rauskommen, aber nur 2 Namen als "Behälter" angegeben wurden. Man kann `split` aber eine Maximalangabe mitgeben. Ein `.split('-U-', 1)` (=maximal einmal splitten) macht die Sache daher noch etwas sicherer.
Antworten