Portál AbcLinuxu, 11. května 2025 06:55

Dotaz: python skript na regularni vyrazy

9.8.2007 15:04 jooke | skóre: 9 | Opava
python skript na regularni vyrazy
Přečteno: 533×
Odpovědět | Admin
Zdravim, pisu nasleduji skript, ktery si otevre log soubor a prohledava v nem vyskyt vyrazu ze seznamu vzor. Stavaji situace je, ze projde soubor na vyskyt prvniho vzoru a shodujici radky se vzorem zapise do noveho souboru, potom projde zase log soubor na vyskyt dalsiho vzoru a zapise do souboru kdyz je vzor v radku. Chci, aby prosel radek na jednou na vyskyt vsech vzoru, a kdyz se nejaky vzor shoduje s radkem, tak at ho zapise do souboru. Bohuzel si nevim rady jak to udelat :-(.

Stavaji skript:
me = open(error_log, 'w+')
vzor = ["error", "warn","unexpected"]
        for i in range(len(vzor)):
                regexp = vzor[i]
                vzor_regexp = re.compile(regexp, re.IGNORECASE)
                for line in file('cesta/k/logu'):
                        test = vzor_regexp.findall(line)
                        if test:
                               me.write(line)
me.close()
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.8.2007 15:13 outsider
Rozbalit Rozbalit vše Re: python skript na regularni vyrazy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vyprdnout se na python a pouzit fgrep ? ;-)
9.8.2007 15:18 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: python skript na regularni vyrazy
chce viac slov, to je grep alebo egrep

pre regulárne výrazy: Alternation

9.8.2007 15:17 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: python skript na regularni vyrazy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mohl bys ukázat pár řádků z toho logu? Bylo by fajn, kdyby "error", "warn" a "unexpected" bylo v řádku na stále stejných pozicích. Nerad bych to dělal nějak hrubou silou.
9.8.2007 15:19 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: python skript na regularni vyrazy
error|warn|unexpected, aká hrubá sila?
9.8.2007 15:35 jooke | skóre: 9 | Opava
Rozbalit Rozbalit vše Re: python skript na regularni vyrazy
pozice muze byt jakakoliv...
log je smed ruznych slov a chyb. Potrebuji to v Pythonu, skript dela i jine veci a kvuli rychlosti to chci mit cele v Pythonu.
9.8.2007 15:45 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: python skript na regularni vyrazy
Tak zkus tohle:
#!/usr/bin/python
import sys
vzory = ["root", "/var", "10"]
for line in file('/etc/passwd'):
    for vzor in vzory:
        if vzor in line:
            sys.stdout.write(line)
            break
testoval jsem to na souboru s půlmiliónem řádků a je to o pár procent pomalejší než egrep.
9.8.2007 16:05 jooke | skóre: 9 | Opava
Rozbalit Rozbalit vše Re: python skript na regularni vyrazy
To vypada slusne. Diky.
Jeste bych, ale chtel at to neni case sensitive a jeste bych chtel mit seznam vzory2, ve kterem by byly slova, ktere nechci prohledavat.
Pr.:
Soubor obsahuje:
error bla bla
error neco neco bla bla
ve vzoru bude treba = ["error"]
a ve vzoru2 ["error neco"]
tak prvni radek zapisu do souboru, protoze je tam vyraz error, ale druhy radek uz ne, protoze je tam slovni spojeni "error neco",
ktere chci ignorovat.
9.8.2007 16:33 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: python skript na regularni vyrazy
Tak třeba takhle:
#!/usr/bin/python
import sys

def jevzor(line, vzory):
    for vzor in vzory:
        if vzor in line:
            return True
    return False

chci = ["root", "/var", "10"]
nechci = ["nologin", "nfs"]

for line in file('/etc/passwd'):
    low = line.lower()
    if jevzor(low, chci) and not jevzor(low, nechci):
        sys.stdout.write(line)
Ale nevím, jak to bude rychlé. S ničím jsem to nesrovnával.
10.8.2007 10:57 jooke | skóre: 9 | Opava
Rozbalit Rozbalit vše Re: python skript na regularni vyrazy
Odzkousim, snad je to to prave... Dekuji
10.8.2007 15:44 jooke | skóre: 9 | Opava
Rozbalit Rozbalit vše Re: python skript na regularni vyrazy
Mam s tim jeste jeden problem, retezec nechci muze byt klidne: Font Server, coz jsou 2 vyrazy a proto se mi neotestuji spravne. pr.
nechci = ["nologin", "nfs", "lighttpd web server", "Avahi daemon"]

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.