Python string bei bestimmten Zeichen kürzen?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
B.A.
User
Beiträge: 3
Registriert: Dienstag 10. November 2009, 14:44

Hi,

vorab, mit Python hatte ich noch nie was am Hut. Ich müsste nur schnell einen String einkürzen damit die Darstellung wieder passt. Der Hauptschuldige ist leider nicht erreichbar :-(

Es geht um das einkürzen einer Internetadresse. Letztendlich soll diese ganz normal aussehen:

String: http://www.meinedomain.de?attr=1&...
Ziel: http://www.meinedomain.de

genau gesagt möchte ich alles was nach der .tld steht weg haben...

In PHP wüsst ich ja wies geht ;)
Bin für alle Tipps dankbar :)
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Dafür gibt es das Modul ``urlparse`` bzw. ``urllib.parse`` ab Python 3.

http://docs.python.org/library/urlparse.html
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Code: Alles auswählen

url = 'http://www.meinedomain.de/?attr=1&'
url = url[:url.find('/',7)]
print url
Ist allerdings immer ein Risiko, dass da noch was anderes davorsteht oder so, deshalb ist das urllib-/urlparse-Modul sicherer.
B.A.
User
Beiträge: 3
Registriert: Dienstag 10. November 2009, 14:44

super vielen Dank funktioniert :D

Ich kann schon davon ausgehen das kein / mehr davor kommt. Die Daten werden sehr sauber in die DB geschieben ... als bugfix ist es voll ok.
Das mit urlparse ist mir ohne viel Ahnung zu heiß :oops:
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

B.A. hat geschrieben:Das mit urlparse ist mir ohne viel Ahnung zu heiß :oops:
Auf der geposteten Seite ist doch ein Beispiel, das man 1:1 umsetzen kann *kopfschüttel*
Als "bugfix" ein Funktion zu verwenden, bei der man schon im Voraus weiß, dass bei bestimmten Eingaben wieder ein Bug auftritt, ist ja mehr als grausam... :evil:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

ice2k3 hat geschrieben:Als "bugfix" ein Funktion zu verwenden, bei der man schon im Voraus weiß, dass bei bestimmten Eingaben wieder ein Bug auftritt, ist ja mehr als grausam... :evil:
Also bei PHP ist sowas Gang und Gäbe, ich muss mir nur mal phpBB 2.x-"Patches" ansehen *schauder* (wobei deren MOD-Dateien ja auch nur schlecht neuerfundene Diffs sind *kopfschüttel*).

@OP: Du solltest dir wirklich ``urlparse`` anschauen. Ist nicht schwerer, aber dafür eine richtige Lösung des Problems.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Ich ärgere mich, dass ich es überhaupt gepostet habe, hatte einfach nur die Fragestellung aus dem Titel entnommen, d.h. einen String kürzen.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Was, wenn die URLs nicht wohlgeformt sind?

Code: Alles auswählen

s = "heise.de"
s[:s.find("/", 7)]
=> heise.d  Oops?
s = "www.abc.com?foo"
s[:s.find("/", 7)]
=> www.abc.com?fo Oops!
Da ja reguläre Ausdrücke eine Lösung für alles sind, biete ich

Code: Alles auswählen

re.findall("(?:https?://)?[^/?]+", s)[0]
:)
Stefan
Zuletzt geändert von sma am Mittwoch 11. November 2009, 10:34, insgesamt 1-mal geändert.
B.A.
User
Beiträge: 3
Registriert: Dienstag 10. November 2009, 14:44

Leonidas hat geschrieben:Du solltest dir wirklich ``urlparse`` anschauen. Ist nicht schwerer, aber dafür eine richtige Lösung des Problems.
sicherlich ist das die bessere Lösung ... nur ging es mir vorrangig um eine schnelle und einfach Lösung ... Und da mir alle Datensätzte bekannt sind da diese moderiert werden kann ich zu 100% ausschließen das da irgendwas steht was den Ablauf beeinträchtigen kann ...

hab jetzt noch ein bisschen gespielt :lol:

Code: Alles auswählen

#!/usr/bin/python

import re
from urlparse import urlparse

url = "www.xxx.tld/?attr_source=xxx&attr_medium=213&attr_campaign=2"
o = urlparse("http://"+url)

print url[:url.find("/",7)]
print re.sub("([\/\?].*$)?", "", url)
print o.netloc
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

B.A. hat geschrieben:Und da mir alle Datensätzte bekannt sind da diese moderiert werden kann ich zu 100% ausschließen das da irgendwas steht was den Ablauf beeinträchtigen kann ...
Ich hoffe, das du nie an Software arbeitest, von der etwas abhängt.

1991 "Das Patriot Raketenabwehrsystem arbeitet innerhalb seiner definierten maximalen Betriebszeit einwandfrei." --> 25 Tote.

1995 "Das System wurde ausgiebig getestet. Zwischen Test- und Produktivbetrieb gibt es keine nennenswerten Unterschiede." --> Hamburger Stellwerk für 2 Tage dicht. Europaweite Störung des Bahn-Verkehrs.

1996 "Wir haben aus den Fehlern 1995 gelernt." --> Berliner S-Bahn für 6 Stunden still gelegt.

1996 "Die Anforderungen haben sich nicht geändert, wir können Programmteile des Vorgängers verwenden." -> Ariane 5 und 370 Millionen US-Dollar gehen in Rauch auf.

... unzählige Beispiele ...

2009 "Das Update hat bisher keine Probleme gemacht, dann können wir die letzten paar Systeme auch in einem Rutsch updaten." --> Ausfall von zwei der drei T-Mobile HTC. Mobilfunknetz für mehrere Stunden tot.
Bottle: Micro Web Framework + Development Blog
Antworten