[Tutor] help--- opening csv in different functions
Dave Angel
d at davea.name
Fri Aug 10 12:35:42 CEST 2012
On 08/10/2012 06:02 AM, leon zaat wrote:
> I am trying to fill a file.
> When i am start the leading fuction the file schould be overwriting the , probarly, existing csv file.
> Accoording from keys from different keys in my sql files, information is collected and written in a other function.
>
> I tried something like this
> <code>
> class BAGExtractPlus(wx.Frame):
> ..........
> #------------------------------------------------------------------------------
> # schrijven van de records
> #------------------------------------------------------------------------------
> def schrijfExportRecord(self,identificatie, hoofdadres, verblijfobjectgeometrie, dag):
>
> ofile=open(r'D:\bestanden\BAG\adrescoordinaten.csv', 'wa')
>
> verblijfhoofd = csv.writer(ofile, delimiter=',',
>
> quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
> sql1="";
> sql1="Select huisnummer, huisletter, huisnummertoevoeging, postcode, gerelateerdeopenbareruimte from nummeraanduiding "
> sql1a= "where aanduidingrecordinactief<> 'J' and"
> hsql1=" einddatum > '" + dag + "' and identificatie = '" + hoofdadres + "'";
> sql1= sql1 + sql1a + hsql1;
> num= database.select(sql1);
> for row in num:
> huisnummer=row[0];
> huisletter=row[1];
> huisnummertoevoeging=row[2];
> postcode=row[3];
> gerelateerdeopenbareruimte=row[4];
> sql2="Select openbareruimtenaam, gerelateerdewoonplaats from openbareruimte where aanduidingrecordinactief<> 'J'"
> sql2= sql2 + "and einddatum > '" + dag + "' and identificatie = '" + gerelateerdeopenbareruimte + "'";
> opn=database.select(sql2);
> for row in database.select(sql2):
> openbareruimtenaam=row[0];
> gerelateerdewoonplaats=row[1];
> sql3="Select woonplaatsnaam from woonplaats where aanduidingrecordinactief<> 'J'"
> sql3= sql3 + "and einddatum > '" + dag + "' and identificatie = '" + gerelateerdewoonplaats + "'";
> wpl=database.select(sql3);
> for row in wpl:
> woonplaatsnaam=row[0];
> newrow=[identificatie, verblijfobjectgeometrie, huisnummer, huisletter, huisnummertoevoeging, postcode,openbareruimtenaam, woonplaatsnaam];
> verblijfhoofd.writerow(newrow);
>
> del wpl[:];
> del opn[:];
> del num[:];
>
> #--------------------------------------------------------------------------------------
> # Exporteer benodigde gegevens
> #--------------------------------------------------------------------------------------
> def ExportBestanden(self, event):
>
> ofile=open(r'D:\bestanden\BAG\adrescoordinaten.csv', 'wb')
> verblijfhoofd = csv.writer(ofile, delimiter=',',
> quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
> dag=str(datetime.date.today());
> sql4="Select adresseerbaarobjectnevenadres.identificatie, adresseerbaarobjectnevenadres.nevenadres from adresseerbaarobjectnevenadres where aanduidingrecordinactief<> 'J' order by adresseerbaarobjectnevenadres.identificatie"
> neven= database.select(sql4);
> for row in neven:
> nidentificatie=row[0];
> nevenadres=row[1];
>
> sql="Select identificatie, hoofdadres, ligplaatsgeometrie from ligplaats where aanduidingrecordinactief<> 'J' and einddatum >'" + dag + "' and identificatie = '"+ nidentificatie + "'"
> lig= database.select(sql);
> for row in lig:
> hoofdadres=nevenadres;
> identificatie=row[0];
> verblijfobjectgeometrie=row[2];
> self.schrijfExportRecord(identificatie, hoofdadres, verblijfobjectgeometrie, dag)
> sql="Select identificatie, hoofdadres, verblijfsobjectgeometrie from verblijfsobject where aanduidingrecordinactief<> 'J' and einddatum >'" + dag + "' and identificatie = '"+ nidentificatie + "'"
> vbo= database.select(sql);
> for row in vbo:
> hoofdadres=row[1];
> identificatie=row[0];
> verblijfobjectgeometrie=row[2];
> self.schrijfExportRecord(identificatie, hoofdadres, verblijfobjectgeometrie, dag)
> sql="Select identificatie, hoofdadres, standplaatsgeometrie from standplaats where aanduidingrecordinactief<> 'J' and einddatum >'" + dag + "' and identificatie = '"+ nidentificatie + "'"
> stand= database.select(sql);
> for row in stand:
> hoofdadres=nevenadres;
> identificatie=row[0];
> verblijfobjectgeometrie=row[2];
> self.schrijfExportRecord(identificatie, hoofdadres, verblijfobjectgeometrie, dag)
> del stand[:];
> del vbo[:];
> del lig[:];
> del neven[:];
> sql="Select identificatie, hoofdadres, ligplaatsgeometrie from ligplaats where aanduidingrecordinactief<> 'J' and einddatum >'" + dag + "'"
> lig= database.select(sql);
> for row in lig:
> hoofdadres=row[1];
> identificatie=row[0];
> verblijfobjectgeometrie=row[2];
> self.schrijfExportRecord(identificatie, hoofdadres, verblijfobjectgeometrie, dag)
> del lig[:];
> sql="Select identificatie, hoofdadres, standplaatsgeometrie from standplaats where aanduidingrecordinactief<> 'J' and einddatum >'" + dag + "'"
> stand= database.select(sql);
> for row in stand:
> hoofdadres=row[1];
> identificatie=row[0];
> verblijfobjectgeometrie=row[2];
> self.schrijfExportRecord(identificatie, hoofdadres, verblijfobjectgeometrie, dag)
> del stand[:];
> </code>
>
> The seems to work, but after 200.00 entries i got the message that opening is not allowed.
>
> What i am doing wrong?
> Is there a way to open the file once.
> When i didn't open it in the first part, it said it couldn't find the file.
>
>
What do you mean by work? Each time through the for row in stand:
loop, it calls
schrijfExportRecord(), which truncates the file. I'll assume that's what you want, though I can't see the leading() function mentioned in your introductory comments.
If that's the case, remove the first two lines of the method ExportBestanden
() . You never use the locals ofile and verblixxxhoofd anyway.
On the other hand, if you want to create a single csv file for the whole lifetime of the BagExstraxtPlus instance, then create it in the __init__ method, and save the ofile and the verblixxx thing as an instance attribute. And don't re-open it in either of the existing methods.
I also see no sign of a close() call. Perhaps the class needs a close() method, whose job it is to close the csv and the actual file.
--
DaveA
More information about the Tutor
mailing list