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?
Filtern: nur ASCII Zeichen aus einem String...
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Jens!jens hat geschrieben:Wie kann ich aus einem String nur die ASCII Zeichen herraus filtern?
Vielleich so:
Code: Alles auswählen
import string
new_string = "".join([ ch for ch in old_string if ch in string.ascii_letters ])
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Oder noch einfacher:
Ich glaub auch, dass das etwas schneller sein wird.
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)
TUFKAB – the user formerly known as blackbird
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
@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
Ausgabe:
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)
Code: Alles auswählen
-> ['Ich', 'bin', 'neu', '']
IchBinNeu
-> ['gibts', 'schon']
GibtsSchon1
-> ['', 'und', 'auch', 'das', '']
UndAuchDas3
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Nur so ne Frage:
Wieso brauchts das parts.append("")?
Gruss
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
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Damit ich eine Liste bekomme:rayo hat geschrieben:Wieso brauchts das parts.append("")?
Code: Alles auswählen
"#und!auch(das)" --> ['', 'und', 'auch', 'das', '']
Weiß keinen besseren Weg...