[python-nl] zoeken binnen file.

Johan Hendriks joh.hendriks at gmail.com
Fri Apr 25 16:28:15 CEST 2014


Goedemiddag allemaal.

Ik heb twee vraagjes.

Ik ben na vele jaren afhoudend te zijn geweest met scripten toch maar 
eens begonnen.
Na lang twijfelen heb ik dan gekozen om alles wat ik wil scripten in 
python te gaan doen.

Nu heb ik mijzelf een projectje opgelegd, maar al gauw loop ik tegen het 
een en ander aan.

Ik heb een bestand waar 1 tot 10 getallen in staan, dit ziet er zo uit.

200
100
80
45
46

Nu wil ik deze getallen opzoeken in files die in een directory staan.
Deze  bestanden bevatten allemaal één regel met BoxID="xx" waar xx dus 
het getal is wat ik wil opzoeken. Eenmaal gevonden dan wil ik het 
bestand geheel wegschrijven als getal.datum.xml

Wat mij nu niet lukt is om een string of variabele aan te maken en deze 
te loopen door de bestanden.

Mijn gedachte was om het bestand te lezen, dan de zoekstring aan te 
maken en dan door de bestanden te gaan en deze eruit zoeken.


Ik heb nu het volgende.


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

# get box ID's to work with
with open("/root/scripts/boxid","r") as f:
     content = f.read()
     truck = content.split()
     print '\n'.join(boxid)

Dit geeft mij het volgende op het scherm.

200
100
80
45
46

Dus het inlezen van het bestand gaat goed, en ik heb dus als ik het goed 
begrijp een list met 5 waardes.

# get number of boxid's
number = len(boxid)
print (number)

Dit gaat ook goed, hij geeft netjes het getal 5.

Maar nu wil ik dus zoeken op BoxID="200",  BoxID="100", BoxID="80", 
BoxID="45" en BoxID="46"

#Create search strings!
#searchstring = ('BoxID="46"')
searchstring = "BoxID=\"boxid[3]\""
print searchstring

Hier gaat het mis.

De output van print search string is BoxID="boxid[3]"
Ik krijg het niet voor elkaar om daar BoxID="200" van te maken.

Als ik searchstring set op ('BoxID="46"') en dan verder ga met het 
script, dan vind hij de bestanden waar deze regel in voor komt. en print 
deze ook netjes op het scherm.

# read the XML files

path = "/usr/local/samba/data/XML"
for fname in os.listdir(path):
#    print fname    # dit werkt, en ik krijg alle bestanden te zien.
     document = os.path.join(path, fname)
     for line in open(document):
#        print document   # dit werkt ook, en dan zien ik alle bestanden 
met het gehele pad
         if searchstring in line:
             print fname

Hoe kan ik de searchstring zo krijgen dat hij alle bestanden afloopt op 
zoek naar BoxID=" < alle getallen uit het bestand > "

Het zal de leeftijd wel zijn, maar ben hier nu al een paar dagen mee 
bezig, maar ik zie het niet helemaal zuiver meer. :D

Is er iemand die mij een klein beetje kan helpen.


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?

Alvast bedankt voor uw tijd, en mijn excuses als de mailing list hier 
niet voor bedoeld is.

gr
Johan


More information about the Python-nl mailing list