Seite 1 von 1
Filtern: nur ASCII Zeichen aus einem String...
Verfasst: Mittwoch 3. Mai 2006, 08:04
von jens
Das haben wir bestimmt schon irgendwo besprochen... Aber ich finde es auf die schnelle nicht...
Wie kann ich aus einem String nur die ASCII Zeichen herraus filtern?
Re: Filtern: nur ASCII Zeichen aus einem String...
Verfasst: Mittwoch 3. Mai 2006, 08:36
von gerold
jens hat geschrieben:Wie kann ich aus einem String nur die ASCII Zeichen herraus filtern?
Hi Jens!
Vielleich so:
Code: Alles auswählen
import string
new_string = "".join([ ch for ch in old_string if ch in string.ascii_letters ])
lg
Gerold

Verfasst: Mittwoch 3. Mai 2006, 08:48
von jens
Super, Danke!

Verfasst: Mittwoch 3. Mai 2006, 16:07
von mitsuhiko
Oder noch einfacher:
Code: Alles auswählen
def make_ascii(s):
if isinstance(s, unicode):
s = s.encode('ascii', 'ignore')
else:
s = s.decode('ascii', 'ignore')
return str(s)
Ich glaub auch, dass das etwas schneller sein wird.
Verfasst: Donnerstag 4. Mai 2006, 06:11
von jens
@blackbird: Auch nicht schlecht...
Ich hab allerdings das ganze nochmals anders gemacht, weil ich möchte, das immer der erste Buchstabe groß ist.
Ist ein wenig so, wie der Anchor-Parser im wiki.python.de
Code: Alles auswählen
def getUniqueShortcut(pageName, nameList):
"""
Liefert einen eindeutige Abkürzung von pageName zurück.
pageName wird von Sonderzeichen gesäubert und evtl. eine
Zahl angehanden, wenn der Kurzname schon in nameList vorkommt.
"""
import string
# Nur ASCII Zeichen erlauben und gleichzeitig trennen
parts = [""]
for char in pageName:
if not char in string.ascii_letters:
parts.append("")
else:
parts[-1] += char
print "->", parts # Debug
# Erster Buchstabe immer groß geschrieben
parts = [i[0].upper() + i[1:] for i in parts if i!=""]
shortcut = "".join(parts)
# doppelte Namen mit Zahlen eindeutig machen
if shortcut in nameList:
for i in xrange(1, 1000):
testname = "%s%i" % (shortcut, i)
if testname not in nameList:
shortcut = testname
break
return shortcut
nameList = ["GibtsSchon","UndAuchDas","UndAuchDas1","UndAuchDas2"]
print getUniqueShortcut("Ich bin neu!", nameList)
print getUniqueShortcut("gibts schon", nameList)
print getUniqueShortcut("#und!auch(das)", nameList)
Ausgabe:
Code: Alles auswählen
-> ['Ich', 'bin', 'neu', '']
IchBinNeu
-> ['gibts', 'schon']
GibtsSchon1
-> ['', 'und', 'auch', 'das', '']
UndAuchDas3
Verfasst: Donnerstag 4. Mai 2006, 06:56
von rayo
Hi
Nur so ne Frage:
Wieso brauchts das parts.append("")?
Code: Alles auswählen
if not char in string.ascii_letters:
parts.append("")
else:
parts[-1] += char
Gruss
Verfasst: Donnerstag 4. Mai 2006, 08:32
von jens
rayo hat geschrieben:Wieso brauchts das parts.append("")?
Damit ich eine Liste bekomme:
Jedes Sonderzeichen macht einen neuen Eintrag in der Liste. So hab ich die Wörter an den Sonderzeichen getrennt. Das mach ich um den jeweils ersten Buchstaben mit .upper() bearbeiten zu können, bevor ich ein "".join() mache...
Weiß keinen besseren Weg...