List Object in String umwandeln

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
kanter72
User
Beiträge: 5
Registriert: Donnerstag 11. September 2014, 06:17

Donnerstag 11. September 2014, 06:27

Ich möchte aus einer bestehenden URL eine neue bauen, komme aber bei einem Grundlagenproblem nicht weiter. Beim Zusammenbau des review_url_string scheitert es. String und List Object lassen sind nicht verbinden. Wie kann ich das List Object in einen String umwandeln?

Code: Alles auswählen

def create_review_urlstring(hds_url_string):
                u = urlparse.urlsplit(hds_url_string)
                q = urlparse.parse_qs(u.query)
                s = q['sid']
                d = q['dcid']
                h = u.path
                h = h.split("/")
                c = h[2]
                h = h[3].split('.')
                h = h[0]
                review_url_string = "http://www.example.com/reviewlist.de.html?" + s + ";dist=1;" + "pagename=" + h + ";type=total;offset=0;rows=10000"
                return review_url_string
Zuletzt geändert von Hyperion am Donnerstag 11. September 2014, 07:51, insgesamt 1-mal geändert.
Grund: Code in Python-Code Tags gesetzt.
Sirius3
User
Beiträge: 8637
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 11. September 2014, 07:06

@kanter72: dann geh mal die Grundlagen durch und lies in der Dokumentation nach, was parse_qs zurückliefert. Dann mußt Du entscheiden, wie Du damit umgehst. Du solltest übrigens aussagekräftigere Namen verwenden, damit Du auch in drei Tagen noch verstehst, was Du da gemacht hast. Zum zusammensetzen von Strings gibt es Stringformatierung.
kanter72
User
Beiträge: 5
Registriert: Donnerstag 11. September 2014, 06:17

Donnerstag 11. September 2014, 12:13

@Sirius3 Wichtig ist nicht, was das query zurück liefert, sondern was in der Variable steht und das ist ein List Object. Entsprechend wird ein TypeError geworfen. Das Problem ist erkannt, ich bräuchte nur einen Hinweis auf die Lösung. Für den Hinweis auf das wälzen von Docs (was ich gemacht habe), brauche ich kein Forum. ;)
Benutzeravatar
/me
User
Beiträge: 3206
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Donnerstag 11. September 2014, 12:48

kanter72 hat geschrieben:Wichtig ist nicht, was das query zurück liefert, sondern was in der Variable steht und das ist ein List Object. Entsprechend wird ein TypeError geworfen. Das Problem ist erkannt, ich bräuchte nur einen Hinweis auf die Lösung.
Du bist der einzige der weiß, wie der Ergebnisstring aussehen soll. Ganz offensichtlich ist s eine Liste. Diese kannst du natürlich nicht mit einem String verketten. Jetzt ist die Frage wie du damit umgehen möchtest. Entweder nimmst du nur den ersten Eintrag oder du verkettest alle Einträge der Liste (sofern es mehrere gibt).

Anhand deines Codes kann man aufgrund fehlender Beispiele von Testdaten für die Eingabe und den entsprechend erwarteten Rückgabewerte leider nicht erkennen, was jetzt tatsächlich das Ziel ist.
kanter72
User
Beiträge: 5
Registriert: Donnerstag 11. September 2014, 06:17

Donnerstag 11. September 2014, 13:13

@/me Danke. Das Ergebnis soll ein String sein. Ich habe also ein Object (Element) von einer Liste. Dieses Object soll in einen String "verwandelt" werden, damit ich einen Stink erzeugen kann (ist eine URL). Im Prinzip nehme ich eine URL und baue aus Teilen davon eine neue URL (String).
Sirius3
User
Beiträge: 8637
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 11. September 2014, 13:16

@kanter72: es gibt etliche Methoden, wie man eine Liste in einen String umwandeln kann. Woher soll der Leser Deines Beitrags wissen, wie das Ergebniss aussehen soll. Wichtig ist ja was parse_qs zurückliefert, weil Du das wissen mußt, um zu wissen, wie Du das, was Da zurückkommt weiterverarbeiten kannst. Hätte ich geschrieben Listen wandelt man mit der repr-Methode in Strings um, wäre zwar Deine Frage beantwortet gewesen, die Antwort hätte Dir aber nicht gefallen, weil es garantiert nicht das ist, was Du eigentlich willst. Also war meine Antwort ein Vorgehen, wie Du herausfinden kannst, was Du eigentlich willst. Aber scheinbar willst Du gar nicht wissen, was Du eigentlich willst.
Benutzeravatar
/me
User
Beiträge: 3206
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Donnerstag 11. September 2014, 13:31

kanter72 hat geschrieben:Dieses Object soll in einen String "verwandelt" werden, damit ich einen Stink erzeugen kann (ist eine URL).
Es ist an dir festzulegen, wie dann die genaue Repräsentation des Strings aussehen soll und die entsprechende Programmierung vorzunehmen. Die klassische Debug-Ausgabe wird da wohl nicht reichen.

Code: Alles auswählen

>>> str([1, 2, 3, 4])
'[1, 2, 3, 4]'
Vielleicht soll es ja so etwas werden, aber ich kann da nur raten.

Code: Alles auswählen

>>> 'sid=' + '&sid='.join(['1', '2', '3', '4'])
'sid=1&sid=2&sid=3&sid=4'
kanter72
User
Beiträge: 5
Registriert: Donnerstag 11. September 2014, 06:17

Freitag 12. September 2014, 02:32

Sirius3 hat geschrieben:@kanter72: ...ätte ich geschrieben Listen wandelt man mit der repr-Methode in Strings um, wäre zwar Deine Frage beantwortet gewesen, die Antwort hätte Dir aber nicht gefallen, weil es garantiert nicht das ist, was Du eigentlich willst. Also war meine Antwort ein Vorgehen, wie Du herausfinden kannst, was Du eigentlich willst. Aber scheinbar willst Du gar nicht wissen, was Du eigentlich willst.
So eine rotzige Antwort habe ich noch in keinem Forum erhalten. Nicht gerade ein Aushängeschild. Ich bin kein Anfänger, lerne aber kein Python um 10 Zeilen einer bestehenden Anwendung zu ändern.
kanter72
User
Beiträge: 5
Registriert: Donnerstag 11. September 2014, 06:17

Freitag 12. September 2014, 02:35

@/me Danke für den Lösungsvorschlag. Ich habe es inzwischen über reguläre Ausdrücke gelöst, da tritt das Problem nicht auf.
Benutzeravatar
/me
User
Beiträge: 3206
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Freitag 12. September 2014, 08:14

kanter72 hat geschrieben:So eine rotzige Antwort habe ich noch in keinem Forum erhalten. Nicht gerade ein Aushängeschild. Ich bin kein Anfänger, lerne aber kein Python um 10 Zeilen einer bestehenden Anwendung zu ändern.
Die Tatsache, dass du für niemanden hier verständlich beschreiben konntest was du jetzt eigentlich als Ergebnis willst, legte durchaus den Verdacht nahe, dass du gar nicht wusstest was du genau als Ergebnis wolltest.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Freitag 12. September 2014, 08:41

kanter72 hat geschrieben:So eine rotzige Antwort habe ich noch in keinem Forum erhalten. Nicht gerade ein Aushängeschild. Ich bin kein Anfänger, lerne aber kein Python um 10 Zeilen einer bestehenden Anwendung zu ändern.
Aber wirlich. Wie kommt Sirius3 nur dazu noch einmal nachzuhaken. Der will dir ja glatt helfen und eine saubere Lösung finden. Unding.
kanter72 hat geschrieben:Ich habe es inzwischen über reguläre Ausdrücke gelöst, da tritt das Problem nicht auf.
Selbstgebastelte reguläre Ausdrücke in Kombination mit URLs, das hört sich nicht nach einer stabilen Lösung an. Ich würde an deiner Stelle das Problem noch einmal genauer beschreiben, dann kommt am Ende auch eine saubere Lösung dabei raus.
Das Leben ist wie ein Tennisball.
BlackJack

Freitag 12. September 2014, 08:47

@kanter72: Die Dir rotzig vorkommende Antwort war nur Reaktion auf Dein rotziges Verhalten Dich mit dem Problem nicht auseinandersetzen zu wollen. Denn was `parse_qs()` als Ergebnis zurück gibt *ist* wichtig für eine angemessene Lösung des Problems. Dabei geht es nicht nur um die Tatsache das es eine Liste ist, das hast Du an der Fehlermeldung ja schon richtig erkannt, sondern was die Elemente in dieser Liste bedeuten. Denn nur wenn Du das weist, kannst Du entscheiden wie Du diese Elemente in eine Zeichenkette umwandeln willst. Das hängt unter anderem davon ab was der Schlüssel für eine Bedeutung hat, also wieviele Werte man da überhaupt sinnvollerweise erwartet. Da kann man bei den Namen `sid` und `pagename` eine Vermutung anstellen, aber Du hast mehr davon wenn Du das selber entscheidest.
Antworten