Suche soll nicht case-sensitive sein

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.
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Suche soll nicht case-sensitive sein

Beitragvon knekke » Freitag 15. April 2005, 14:16

Da bin ich schon wieder :D
Diesmal mit einer Frage zu einer Suchfunktion. Und zwar benutze ich zu diesem Zweck re.match. Das entsprechende __doc__ ist nicht besonders aufschlussreich - woher bekomme ich denn noch informationen zur verwendung eines Moduls (wenn nicht aus diesem Forum :wink: ) ??
Ich poste mal eben das komplette Script:

Code: Alles auswählen

#!/usr/bin/python
# -*- encoding: latin-1 -*-
import os, re
   
def archive():
    cd_drive = raw_input("CD-Laufwerk: ")
    cd_name = raw_input("Name der CD: ")
    data = file("cd_database.txt","a")
    backup = file("%s.txt" % cd_name, "a")
    for paths, dirs, files in os.walk(cd_drive):
        for fil in files:
            data.write("%s ||%s ||%s || \n" % (fil, cd_name, paths))
            backup.write("%s ||%s ||%s || \n" % (file, cd_name, paths))
    data.close()
    backup.close()
    print "Archivierung von %s abgeschlossen!" % cd_name
    start()

def search(files, cd_names, paths):
    searchstring = raw_input("Suchbegriff (z.B. .*suchbegriff.*): ")
    pattern = re.compile(searchstring)
    file_oder_dir = input("""\n 1: Suche Datei \n 2: Suche Verzeichnis \n\n Auswahl: """)
    if file_oder_dir == 1:
        for i, element in enumerate(files):
            if pattern.match(element):
                print "%s   %s  %s" % (cd_names[i], files[i], paths[i])
    elif file_oder_dir == 2:
        tempdirs = []
        temp_cds = []
        for i, element in enumerate(paths):
            if pattern.match(element):
                if not element in tempdirs:
                    tempdirs.append(element)
                    temp_cds.append(cd_names[i])
        for a, dirs in enumerate(tempdirs):
            print "%s   %s" % (temp_cds[a], dirs)     
    frage = input("""\n 1: neue Suche \n 2: Hauptmenü \n 3: beenden \n\n Auswahl: """)
    if frage == 1:
        search(files, cd_names, paths)
    elif frage == 2:
        start()
    elif frage == 3:
        print ""
        print "beende Programm... Selbstzerstörung aktiviert..."
        print ""
    else:
        print ""
        print "1, 2 oder 3 !"
        print "------"
        start()
       
def search_archive():
    data = open("cd_database.txt", "r")
    files = []
    cd_names = []
    paths =[]
    for line in data.readlines():
        file, cd_name, path, eol = line.split('||')
        files.append(file)
        cd_names.append(cd_name)
        paths.append(path)
        data.close()
    search(files, cd_names, paths)

def start():
    auswahl = input("""\n 1: Neue CD archivieren \n 2: Archiv durchsuchen \n 3: Beenden \n\n Auswahl:  """)
    if auswahl == 1:
        archive()
    elif auswahl == 2:
        search_archive()
    elif auswahl == 3:
        print ""
        print "beende Programm... Selbstzerstörung aktiviert..."
        print ""
    else:
        print ""
        print "1, 2 oder 3 !"
        print "------"
        start()

if __name__== '__main__':
    start()                   


Es geht um def search(): funktioniert eigentlich 1a, ist aber case-sensitive :( Wie kann ich das ändern?? Und woher weiß ich, daß ich als wildcards .* und nicht einfach * benutzen soll? (ich weiß es von mawe, aber woher weiß der das???)
Wiedereinmal Fragen über Fragen
Ach ja, eine hab ich noch: ab wann werden csv eigentlich zu lang, oder besser, ab welcher größe schaut man sich besser nach einer alternativen Datenspeichermethode um??
thx
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Freitag 15. April 2005, 14:37

Hi!

knekke hat geschrieben:Und woher weiß ich, daß ich als wildcards .* und nicht einfach * benutzen soll? (ich weiß es von mawe, aber woher weiß der das???)

Der Punkt steht in einem regulären Ausdruck für irgendein Zeichen. Das * ist ein Quantifier, d.h. er sagt wie oft das Zeichen das vor ihm steht vorkommen soll.
* ... 0 oder mehrmals
+ ... 1 oder mehrmals
? ... 0 oder 1 mal
Der * alleine is also sinnlos.
Woher weiss man das? Lesen, Fragen, Ausprobieren :wink: Schau mal ins Forum Links und Tutorials, dort gibts einen Link zu Regexes unter Python :wink:

Zum case sensitive: Wenn Du's nicht cs haben willst, lass die RE in lowercase eingeben, und wandle auch den String in dem Du suchst in lowercase um. Was intelligenteres fällt mir auf die Schnelle nicht ein.

Gruß, mawe
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 15. April 2005, 15:27

mawe hat geschrieben:Woher weiss man das? Lesen, Fragen, Ausprobieren :wink: Schau mal ins Forum Links und Tutorials, dort gibts einen Link zu Regexes unter Python :wink:

Besonders den ersten deutschen Link kann ich empfehlen.

mawe hat geschrieben:Zum case sensitive: Wenn Du's nicht cs haben willst, lass die RE in lowercase eingeben, und wandle auch den String in dem Du suchst in lowercase um. Was intelligenteres fällt mir auf die Schnelle nicht ein.

Es gibt auch die Möglichkeit beim re.compile() noch re.IGNORECASE/re.I anzugeben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Freitag 15. April 2005, 15:32

Leonidas hat geschrieben:Es gibt auch die Möglichkeit beim re.compile() noch re.IGNORECASE/re.I anzugeben.

Richtig, danke, das ist eindeutig intelligenter. :)
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Beitragvon knekke » Freitag 15. April 2005, 17:27

Schau mal ins Forum Links und Tutorials, dort gibts einen Link zu Regexes unter Python :wink:

Warum hab ich da vorher noch nicht reingeschaut :roll: ???
Die python-sidebar für firefox ist auch absolut deluxe!! Dann wolln wir mal hoffen, daß dadurch die Abstände in denen ich Euch mit meinen Fragen quälen muss etwas größer werden...
An dieser Stelle noch mal ein großes Lob an dieses Forum, das mit Abstand das beste ist in dem ich je mein unwesen getrieben habe. Bevor ich aber in meiner eigenen Schleimspur ertrinke wünsche ich noch schnell ein schönes WE.... FEIERABEND :D
BlackJack

Re: Suche soll nicht case-sensitive sein

Beitragvon BlackJack » Sonntag 17. April 2005, 00:24

knekke hat geschrieben:Ach ja, eine hab ich noch: ab wann werden csv eigentlich zu lang, oder besser, ab welcher größe schaut man sich besser nach einer alternativen Datenspeichermethode um??


Was heisst zu lang? Wenn Du die Daten nur sequentiell liest und schreibst, dann gibt's da keine Grenze.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]