[python-nl] zoeken binnen file.

Johan Hendriks joh.hendriks at gmail.com
Sat Apr 26 01:04:24 CEST 2014


op 25-04-14 18:36, albert visser schreef:
> Hoi Johan,
>
> On Fri, 25 Apr 2014 16:28:15 +0200, Johan Hendriks 
> <joh.hendriks at gmail.com> wrote:
>
>> Goedemiddag allemaal.
>>
>
> Je belangrijkste issues lijken me het samenstellen van de zoekstring 
> en het aflopen van alle mogelijkheden bij het zoeken.
>
> Zoals eerder verteld kun je een zoekstring opbouwen als zoekstring = 
> 'BoxID="{}".format(boxid)
> Bij het doorlezen van het boxid bestand kun je een in plaats van de 
> boxid's te printen een list opbouwen met alle dingen die je zoekt.
> Bv.
> with open("/root/scripts/boxid","r") as f:
>     boxids = ['BoxID="{}".format(x.strip()) for x in f.readlines()]
>
> Tijdens de lus waarin je de bestanden doorloopt kun je dan alle 
> zoekstrings stuk voor stuk uitproberen:
>
> for filename in all_files:
>     found = False
>     with open(filename) as f_in:
>         for search in boxids:
>             if search in f_in.read():
>                 found = True
>                 break
>     if found:
>         print(filename) # of wat je er dan ook mee wilt doen
>
> Als dit te snel gaat: ik heb hier wat statements in elkaar geschoven, 
> als je wilt kun je de langere versie ook krijgen.
> Disclaimer: ik heb deze code niet getest dus of het werkt weet ik 
> niet, het is meer bedoeld om je een idee te geven van hoe je dit kan 
> aanpakken.
> NB ik gebruik hier print(x) in plaats van print x, dat is omdat ik me 
> heb aangewend om met Python 3 te werken; ik zou je aanraden om als je 
> net begint dat niet met Python 2 te doen tenzij je daar een absoluut 
> goede reden voor hebt.
>
>>
>>
>> Mijn tweede vraag is zijn er in Nederland gebruikers groepen die 
>> python programmeer lessen geven, of zijn er lokale groepen of mensen 
>> die dit doen?
>>
>
> Geen idee maar mailing lijsten zoals deze zijn hier volgens mij bij 
> uitstek geschikt voor. Als beginner zou je misschien ook Python-tutor 
> kunnen proberen, maar dat is dan wel in het Engels.
> Hou er rekening mee dat veel mensen liever je eigen code willen zien 
> en daar advies over geven dan je programma's voor je schrijven - ik 
> zeg altijd maar dat je meer leert van een paar keer iets fout doen dan 
> van een "first-time right".
>
>
>> Alvast bedankt voor uw tijd, en mijn excuses als de mailing list hier 
>> niet voor bedoeld is.
>
> Zie boven
>>
>> gr
>> Johan
>> _______________________________________________
>> Python-nl mailing list
>> Python-nl at python.org
>> https://mail.python.org/mailman/listinfo/python-nl
>
>
Dankzij jullie aanwijzingen is het mij dan toch gelukt, en ik zag het 
eigenlijk al niet echt meer zitten :D

Het was even stoeien, maar de aanhouder wint..
De prints tussen door deed ik om te kijken of er ook daadwerkelijk iets 
uit kwam.
bijvoorbeeld print content gaf mij op een gegeven moment
"123
"
Zo kwam ik er dus achter dat er een return mee kwam. na wat googlen kun 
je die dus weghalen met rstrip()
Het is erg leuk om zo bezig te zijn, maar soms heb je net even het zetje 
in de juiste richting nodig.


Uiteindelijk is het script als volgt geworden.

#!/usr/bin/env python
import os, string

# get boxid's

with open("/root/scripts/boxid","r") as f:
     content = f.read().rstrip("\n")
     boxid = content.split()

# read the XML files

path = "/usr/local/samba/data/XML"

for fname in os.listdir(path):
     document = os.path.join(path, fname)
     for line in open(document):
          for i in range(len(boxid)):
              searchstring = 'BoxID="{}"'.format(boxid[i])
              if searchstring in line:
                  print document, searchstring

Het bestand /root/scripts/boxid bevat het volgende :
49
46
149
123

Na het uitvoeren van het script ziet het er als volgt uit.

FreeBSD-thuis scripts # ./ggsecurity.py
/usr/local/samba/data/XML/RXL0061361833.xml', 'BoxID="123"
/usr/local/samba/data/XML/RXL0061361560.xml', 'BoxID="123"
/usr/local/samba/data/XML/RXL0061361243.xml', 'BoxID="123"
/usr/local/samba/data/XML/RXL0061360944.xml', 'BoxID="123"
/usr/local/samba/data/XML/RXL0061360652.xml', 'BoxID="123"
/usr/local/samba/data/XML/RXL0061346439.xml', 'BoxID="46"
/usr/local/samba/data/XML/RXL0061380738.xml', 'BoxID="123"
/usr/local/samba/data/XML/RXL0061380409.xml', 'BoxID="123"
/usr/local/samba/data/XML/RXL0061380106.xml', 'BoxID="123"
/usr/local/samba/data/XML/RXL1670876746.xml', 'BoxID="46"
/usr/local/samba/data/XML/1656754454544.xml', 'BoxID="49"
/usr/local/samba/data/XML/1556467754332.xml', 'BoxID="149"

Nu is het tijd om te gaan slapen....
Van de week weer verder om er wat meer acties aan vast te knopen zoals 
het verplaatsen en hernoemen van de gevonden bestanden.

Ik wil jullie allemaal heel erg bedanken voor jullie tijd om mij op het 
goede spoor te zetten.

gr
Johan


More information about the Python-nl mailing list