Filtern: nur ASCII Zeichen aus einem String...

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
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 3. Mai 2006, 08:04

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?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 3. Mai 2006, 08:36

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 3. Mai 2006, 08:48

Super, Danke! :lol:

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Mittwoch 3. Mai 2006, 16:07

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.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 4. Mai 2006, 06:11

@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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Donnerstag 4. Mai 2006, 06:56

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
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 4. Mai 2006, 08:32

rayo hat geschrieben:Wieso brauchts das parts.append("")?
Damit ich eine Liste bekomme:

Code: Alles auswählen

"#und!auch(das)" --> ['', 'und', 'auch', 'das', '']
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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten