Fehler bei "from string import strip" und python3.

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.
roby
User
Beiträge: 7
Registriert: Freitag 6. März 2009, 14:59

Donnerstag 12. März 2009, 15:01

Hallo,
ich hab auf meinem Mac python 2.5.1 und python 3.0.1. Wenn ich folgenden Beispielcode mit python 2.5 ausfuehre, gibt es keinen Fehler. Starte ich das Skript hingegen mit python3.0 erhalte ich einen ImportError: cannot import strip.
Hab schon in der Documentation und im Changelog von python 3 gesucht aber nix gefunden. Hoffe ihr koennt mir weiter helfen.
Gruß roby

Code: Alles auswählen

from string import strip

line = "   abc   :  def   "
s = map(strip, line.split(':', 1))
print(s)
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Donnerstag 12. März 2009, 15:10

http://docs.python.org/3.0/library/string.html

Da solltest du das durchaus finden - oder besser gesagt nicht, da es herausgeflogen ist ;) .
`strip' aus `string' brauchst du aber nicht. Das ist schon lange eine string-methode, d.h. du kannst es direkt auf strings anwenden:

Code: Alles auswählen

teststr = "test!   "
print teststr.strip()
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Donnerstag 12. März 2009, 15:17

Diese Funktionen erscheinen in er 2.x-Doku auch unter deprecated. Sie sind zwar noch da (in der 2er-Serie), aber benutzen sollte man sie trotzdem nicht mehr.
roby
User
Beiträge: 7
Registriert: Freitag 6. März 2009, 14:59

Donnerstag 12. März 2009, 15:36

Ok soweit hab ich das auch gesehen, aber ich hab nach ner Stelle gesucht wo konkret steht das es rausgeflogen ist und was man als Alternative im Zusammenhang mit map verwenden kann. Ok ich koennte auch in ner Schleife das strip() auf jedes Element in der Liste anwenden finde das aber nicht so elegant wie s = map(strip, line.split(':', 1)); .
Benutzeravatar
snafu
User
Beiträge: 5459
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Donnerstag 12. März 2009, 15:41

Man könnte auch (sollte vielleicht sogar?) hier List Comprehension nutzen. Dann musst du auch nichts importieren.

Code: Alles auswählen

In [7]: [elem.strip() for elem in line.split(':', 1)]
Out[7]: ['abc', 'def']
shcol (Repo | Doc | PyPi)
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Donnerstag 12. März 2009, 16:15

roby hat geschrieben:Ok soweit hab ich das auch gesehen, aber ich hab nach ner Stelle gesucht wo konkret steht das es rausgeflogen ist und was man als Alternative im Zusammenhang mit map verwenden kann.
http://docs.python.org/library/string.h ... -functions
http://www.python.org/dev/peps/pep-0202/
Ok ich koennte auch in ner Schleife das strip() auf jedes Element in der Liste anwenden finde das aber nicht so elegant wie s = map(strip, line.split(':', 1)); .
Du könntest sowas machen:

Code: Alles auswählen

s = map(str.strip, line.split(':', 1))
Das funktioniert aber mit Unicode so nicht. Da müsstest du dann unicode.strip nehmen. Besser ist also eine List Comprehension, wie snafu gezeigt hat.

Gruß,
Manuel
roby
User
Beiträge: 7
Registriert: Freitag 6. März 2009, 14:59

Donnerstag 12. März 2009, 16:16

Jut das macht doch dann im prinzip das selbe wie map, danke snafu!
DasIch
User
Beiträge: 2450
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 12. März 2009, 16:21

Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Donnerstag 12. März 2009, 16:23

DasIch hat geschrieben:lambda 8)
Wobei man lambda nicht unbedingt als elegant empfinden muss ;-).
DasIch
User
Beiträge: 2450
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 12. März 2009, 16:24

Kommt auf das Problem an. lambda ist aber prinzipiell eine geniale Sache,
Benutzeravatar
snafu
User
Beiträge: 5459
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Donnerstag 12. März 2009, 16:32

DasIch hat geschrieben:lambda ist aber prinzipiell eine geniale Sache,
Im konkreten Fall aber IMHO nicht so geeignet.
shcol (Repo | Doc | PyPi)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 12. März 2009, 17:16

DasIch hat geschrieben:lambda ist aber prinzipiell eine geniale Sache,
Prinzipiell ja, in Python aber eher weniger. Dort versuche ich so gut wie möglich ``lambda`` zu vermeiden und verwende lieber Factory-Funktionen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Donnerstag 12. März 2009, 17:22

Ich erwähne mal der Vollständigkeit halber `methodcaller()` aus dem [mod]operator[/mod]-Modul.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 12. März 2009, 17:31

Yay! :D

Code: Alles auswählen

from itertools import imap
from operator import methodcaller
print list(imap(methodcaller('strip'), ' Das : ist : kein : IRC-String'.split(':')))
My god, it's full of CARs! | Leonidasvoice vs Modvoice
roby
User
Beiträge: 7
Registriert: Freitag 6. März 2009, 14:59

Freitag 13. März 2009, 07:54

Das ist ja schon ne ganze Menge, thx Leute!
Antworten