[python-nl] zoeken binnen file.

Johan Hendriks joh.hendriks at gmail.com
Fri Apr 25 17:20:57 CEST 2014


Ik heb een hele rits bestanden, en elk uur komen daar een paar 100 bij.
In elk van deze bestanden staat maar één regel met daarin BoxID="<nummer>"

Nu wil ik dus uit al deze bestanden bijvoorbeeld alleen de bestanden met 
BoxID="30", maar morgen kan dit weer anders zijn en dan wil ik 
bijvoorbeeld BoxID 90 en 200
Ik schrijf de nummers die ik wil hebben in het bestand boxid, dat is het 
eerste stukje, die leest hij goed uit. Daarna wil ik het script laten 
filteren op de daadwerkelijke bestanden en dus op de nummers die ik 
opgegeven heb in het bestand boxid.

Ik hoop dat het wat duidelijker is... Maar ik ben er nu al zo lang mee 
bezig dat ik door de bomen het bos niet meer zie...

Alvast bedankt voor het antwoord..





op 25-04-14 17:10, Floris van Manen schreef:
> Je hebt een folder met daarin een aantal bestanden en in elk bestand een aantal regels met op elke regel één getal?
> Vervolgens wil je een lijst van alle bestanden en daarvan alle regels waarvan de waarde <= is aan een gegeven integer (float) waarde?
>
> In dat geval zou je een dict kunnen maken met als sleutel de naam van het bestand en als value de lijst van de getallen in dat bestand.
>
> Afhankelijk van het aantal keren dat je die data wilt doorzoeken, kun je er voor kiezen om de getallen als index te kiezen met als value een lijst van bestandsnamen.
>
> .F
>
>
> bijvoorbeeld:
>
>
> #!/usr/bin/env python
> # encoding: utf-8
>
> import os
> from collections import defaultdict
>
> fv = defaultdict(list)
> vf = defaultdict(list)
>
> folder = 'tmp'
> for fn in os.listdir(folder):
>      ffn = os.path.sep.join([folder, fn])
>      if fn.endswith('.txt'):
>          with open(ffn, 'r') as fp:
>              content = fp.readlines()
>              values = [int(x) for x in content if x]
>              print ffn
>              print values
>              fv[ffn].append( values)
>              for v in values:
>                  vf[v].append( ffn )
>
>
> print '='*20
> print fv
> print '='*20
> print vf
>
> print '='*20
> zoek = 46
> for k,v in vf.iteritems():
>      if k <= zoek:
>          print v
>
>
>
>
>
>
>
> _______________________________________________
> Python-nl mailing list
> Python-nl at python.org
> https://mail.python.org/mailman/listinfo/python-nl



More information about the Python-nl mailing list