Seite 1 von 1

String wird in 2 Zeilen geschrieben

Verfasst: Sonntag 8. Februar 2015, 01:43
von ide
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

Re: String wird in 2 Zeilen geschrieben

Verfasst: Sonntag 8. Februar 2015, 01:54
von 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)

Re: String wird in 2 Zeilen geschrieben

Verfasst: Sonntag 8. Februar 2015, 12:13
von snafu
@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.