Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16
  1. #11
    ist kein Terrorist Avatar von Terrorist
    Registriert seit
    21.09.2007
    Beiträge
    465

    Standard

    ich bin eine Zeile
    und ich bin die zweite
    und überhaupt
    ich bin eine Zeile
    und ich bin die zweite
    und überhaupt
    daraus sollte das werden.

    Hab es mit deinem Beispiel ausprobiert. Es klappt. Aber wenn ich es mit mehreren tausend Zeilen ausprobiere, dann spinnt das Script irgendwie.

    Ich werde mich heute Abend ausführlicher dazu Äußern.

    Schoneinmal danke an EBFE für deine Mühe .

    btw: Die Textdateien sind nur mehrere MB groß, haben aber mehrere tausend / hunderttausend Zeilen.



  2. #12
    #chkrootkit Avatar von sketax
    Registriert seit
    25.11.2008
    Beiträge
    505

    Standard

    Wooow sorry das ich hier so reinplatze, aber ich habe ein ähnliches problem. und zwar habe ich viele viclogs und in fast jeder accounts-datei steht nen steam account drinne
    also das sieht so aus
    STEAM: account
    password

    wie kann ich diesen bereich von sagen wir mal 150 dateien in eine extrahieren lassen?


    BM-Profil
    (2|31|0)

  3. #13
    OpCodeKiddy Avatar von EBFE
    Registriert seit
    30.03.2009
    Beiträge
    442

    Standard

    Hab es mit deinem Beispiel ausprobiert. Es klappt. Aber wenn ich es mit mehreren tausend Zeilen ausprobiere, dann spinnt das Script irgendwie.

    Ich werde mich heute Abend ausführlicher dazu Äußern.
    also
    Zitat:
    ich bin eine Zeile
    und ich bin die zweite
    und überhaupt
    mit
    bin
    überhaupt ....
    soll
    ich bin eine Zeile
    und ich bin die zweite
    und überhaupt
    ergeben.
    (ok, eventuell kein wirklich gutes Beispiel).

    Das würde aber heißten, dass du pro Wort in einer Datei alle Zeilen in der anderen Datei haben möchtest, in denen dieses Wort vorkommt. Insofern sollte das Script schon korrekt arbeiten (gut, es ist im Moment kein Performancewunder ) - es nimmt sich ein Wort und sucht alle Zeilen aus der anderen Datei, in denen dieses Wort vorkommt. Es kann ja nicht wissen, ob nur eine Zeile mit diesem Wort oder alle haben möchtest. Insofern also brauchst du schon entweder ein anderes Suchkonzept oder eine bessere Beschreibung (falls ich das nun missvestehe )
    Geändert von EBFE (17.05.2010 um 13:37 Uhr)
    TrueCrypt/RAR/Zip Passwort vergessen und das Bruten dauert ewig? Oder brauchst du fein abgestimmte Wortlisten? Hilf dir selbst mit WLML - Word List Markup Language
    Gib Stoned/Mebroot/Sinowal und anderen Bootkits keine Chance: Anti Bootkit v 0.8.5

  4. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Terrorist (17.05.2010)

  5. #14
    ist kein Terrorist Avatar von Terrorist
    Registriert seit
    21.09.2007
    Beiträge
    465

    Standard

    Also: Nehmen wir mal ein besseres Beispiel:
    Alles.txt:

    12345:test
    hallo:bye
    Tschüss:Hey
    freehack:beste
    rofl:lol
    kewl:Lawl
    lol:lal

    "Gefiltert.txt":
    hallo
    lol
    freehack
    kewl

    "Ende.txt"´:
    hallo:bye
    rofl:lol
    lol:lal
    freehack:beste
    kewl:lawl
    Wenn jetzt ein Wort aus Gefiltert.txt in Alles.txt vorkommt und es in 500 Zeilen vorkommt, möchte ich auch 500 Zeilen haben :-D

    Wenn ich jetzt das Script starte, bleibt Ende.txt trotzdem leer...
    C:\Python26>python.exe filediff.py alles.txt gefiltert.txt ende.txt



  6. #15
    OpCodeKiddy Avatar von EBFE
    Registriert seit
    30.03.2009
    Beiträge
    442

    Standard

    Zitat Zitat von Terrorist Beitrag anzeigen
    hallo:bye

    ja, das ist erstmal "programmmäßig" gesehen erstmal auch ein Wort, da zusammengeschrieben
    Wenn bei dir die Wörter in einem bestimmten Format vorkommen, musst du es auch sagen . Also z.B wenn ein Trennzeichen wie ":" oder " " (Leerzeichen) genutzt wird (das kann man ja auch übergeben lassen).

    Dieses Script dürfte allgemein funktionieren:
    Code:
    import sys
    
    def file_to_lines(name):
        with open(name, 'r') as f:
            result = f.read()
        return result.splitlines()
    
    def main():
        try:
            text = file_to_lines(sys.argv[1])
            words = file_to_lines(sys.argv[2])
            result = []
            for line in text:
                for word in words:
                    if line.find(word)>-1:
                        result.append(line)
                        break     #ein Fund pro Zeile reicht
                
            
            with open(sys.argv[3],'w') as f:
                f.write('\n'.join(result))
            
        except IOError:
            print "Aufruf:\n",\
                  "filediff.py original.txt words.txt result.txt\n"
    
    main()
    Sucht, ob ein Wort in der Zeile vorkommt (allerdings auch als "Subwort" bzw. als Bestandteil eines Worts). D.h es findet bei der Suche nach "lol" im
    Text:
    Code:
    lol:hallo
    lolcat:hey
    helol:zeile
    alle 3 Zeilen

    Hier die andere Version, die nur ganze Wörter findet, aber davon ausgeht, dass diese dann mit einem Trennzeichen getrennt sind - wie z.B in deinem Beispiel "lol:lal" mit ":"
    Code:
    iimport sys
    
    def file_to_lines(name):
        with open(name, 'r') as f:
            result = f.read()
        return result.splitlines()
    
    def main():
        try:
            text = file_to_lines(sys.argv[1])
            words = file_to_lines(sys.argv[2])
            result = []
    
            if len(sys.argv)>4:
                separator = sys.argv[4]
            else:
                separator = ":"
    
            for line in text:
                for word in words:
                   if word in line.split(separator):
                       result.append(line)
                       break                          #es reicht, wenn ein Wort in der Zeile vorkommt
                
            
            with open(sys.argv[3],'w') as f:
                f.write('\n'.join(result))
            
        except IOError:
            print "Aufruf:\n",\
                  "filediff.py original.txt words.txt result.txt separator\n"
    
    main()
    Funktioniert wie bis jetzt, nur dass du hier noch das Trennzeichen mit eingeben kannst:
    Code:
    filediff.py original.txt gefiltert.txt ergebnis.txt _trennzeichen_
    für Trennzeichen dann : oder . oder " " (Leerzeichen - muss in " " stehen) - also das jeweilige Trennzeichen angeben.
    Es können auch mehrere Zeichen sein wie ":-:" oder wonach die Daten auch immer getrennt sind. Wird kein Trennzeichen angegeben, nimmt das Script ":" als Defaultwert.

    Edit/PS: beide Scripte sind jetzt so gebaut, dass eine Zeile höchstens ein mal im Ergebnis vorkommt (auch wenn da z.B mehrere Wörter drauf treffen) - falls es nicht so erwünscht ist, einfach das "break" in
    Code:
    break     #ein Fund pro Zeile reicht
    löschen.
    Geändert von EBFE (17.05.2010 um 17:38 Uhr)
    TrueCrypt/RAR/Zip Passwort vergessen und das Bruten dauert ewig? Oder brauchst du fein abgestimmte Wortlisten? Hilf dir selbst mit WLML - Word List Markup Language
    Gib Stoned/Mebroot/Sinowal und anderen Bootkits keine Chance: Anti Bootkit v 0.8.5

  7. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Terrorist (17.05.2010)

  8. #16
    ist kein Terrorist Avatar von Terrorist
    Registriert seit
    21.09.2007
    Beiträge
    465

    Standard

    Vielen vielen Dank! Es funktioniert wunderbar! Bei dem zweiten Script bekam ich einen Error, aber das lag daran, dass du iimport anstatt import geschrieben hattest xD
    Aber sonst funktioniert es perfekt!



Seite 2 von 2 ErsteErste 12

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •