[Python] unpack requires a string argument of length 8?
Cynthia Zambrano
cynthia.zambrano a mail.polimi.it
Gio 13 Maggio 2010 00:30:07 CEST
Ciao a tutti!
E' la prima volta che scrivo in questa ML ma vi seguo da parecchio (non che
ci capisca molto dato che sono veramente inesperta) per capire quali sono le
potenzialità di questo linguaggio che mi sta dando grandi soddisfazioni
nonostante (ripeto) di programmazione in generale sono quasi a digiuno.
Ho creato questo programmino semplicissimo che trasforma tutte le tabelle
.dbf contenute in una cartella in formato csv.
import csv
import os
from dbfpy import dbf
pathin ="F:\\zambrano\\scatterplot\\combine_2dt_table\\"
pathout = "F:\\zambrano\\scatterplot\\csv\\combine_2dt_table\\"
for table in os.listdir(pathin):
if table.endswith('dbf'):
newfile = pathout + table[:-3]+"csv"
outFile = open(newfile, 'a')
try:
dbfFile = dbf.Dbf(open(pathin + table,'r'))
csvFile = csv.writer(open(newfile, 'wb'))
headers = range(len(dbfFile.fieldNames))
allRows = []
for row in dbfFile:
rows = []
for num in headers:
rows.append(row[num])
allRows.append(rows)
csvFile.writerow(dbfFile.fieldNames)
for row in allRows:
csvFile.writerow(row)
except Exception,e:
print '\nproblemi con '+ newfile
print e
Per alcune però mi da il seguente messaggio: "unpack requires a string
argument of length 8".
Dove ho sbagliato?
Grazie!
*C*ynthia
Il giorno 12 maggio 2010 12.00, <python-request a lists.python.it> ha scritto:
> Invia le richieste di iscrizione alla lista Python all'indirizzo
> python a lists.python.it
>
> Per iscriverti o cancellarti attraverso il web, visita
> http://lists.python.it/mailman/listinfo/python
> oppure, via email, manda un messaggio con oggetto `help' all'indirizzo
> python-request a lists.python.it
>
> Puoi contattare la persona che gestisce la lista all'indirizzo
> python-owner a lists.python.it
>
> Se rispondi a questo messaggio, per favore edita la linea dell'oggetto
> in modo che sia più utile di un semplice "Re: Contenuti del digest
> della lista Python..."
>
>
> Argomenti del Giorno:
>
> 1. Re: Blocco casuale nel codice (Alessandro Re)
> 2. Re: GIL e fork - multiprocesso - (Alessandro Agosto)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Tue, 11 May 2010 19:23:02 +0200
> From: Alessandro Re <akirosspower a gmail.com>
> Subject: Re: [Python] Blocco casuale nel codice
> To: Discussioni generali sul linguaggio Python
> <python a lists.python.it>
> Message-ID:
> <AANLkTin821l9iXFuIg-3kVvr16aepb1nCilue67sAmIE a mail.gmail.com>
> Content-Type: text/plain; charset=UTF-8
>
> 2010/5/11 Pietro Battiston <toobaz a email.it>:
> > Nella mia ignoranza di una soluzione pulita, se fossi nella tua
> > situazione probabilmente farei un
> >
> > try:
> > chiamata_che_ogni_tanto_si_blocca()
> > except KeyboardInterrupt:
> > pass
> >
> >
> > A questo punto, se ad esempio il tutto gira in un terminale interattivo,
> > potrei, quando decido che "si è piantato", dare un Ctrl+C ed ispezionare
> > le variabili che più mi aggradano.
>
> Uuuh non ci avevo pensato! :) Bella idea, spero di ricordarmela se mi
> capitasse un'altra situazione simile...
>
> Grazie!
>
> ~Ale
>
>
> ------------------------------
>
> Message: 2
> Date: Wed, 12 May 2010 00:28:50 +0200
> From: Alessandro Agosto <the.6one6 a gmail.com>
> Subject: Re: [Python] GIL e fork - multiprocesso -
> To: Discussioni generali sul linguaggio Python
> <python a lists.python.it>
> Message-ID:
> <AANLkTikrLJSil2-4qfG5gcOyDAPqFleo0DrxpRwtM6T4 a mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> Il giorno 11 maggio 2010 19.16, Manlio Perillo <manlio_perillo a libero.it>
> ha
> scritto:
>
> > Ciao
> >
> Ciao Manlio!
>
> > La traduzione non è corretta.
> > Meglio "limitato dalla CPU", o qualcosa di simile.
> >
>
> Ti ringrazio, ci speravo che intervenissi per proporre una traduzione
> appropriata :)
>
> Il codice che hai postato usa il threading nel modo sbagliato, perchè le
> > due funzioni sono chiamate in modo sequenziale.
> >
> Beh devo ammettere che non ho mai usato il multithreading prima in python,
> e quell'esempio l'ho preso tal e quale a quel documento di cui sopra che
> parla del GIL. Ti ringrazio della segnalazione, in effetti trattandosi di
> multithreading, sebbene l'abbia usato solo in C/C++, mi sembrava strano
> come
> applicazione, ma del resto python ha sempre qualcosa di nuovo da
> insegnarmi,
> e per questo lo trovo infinitamente attraente (per quanto possa esserlo un
> linguaggio di programmazione, vedi: intrigante, attrae la mia curiosità,
> NdT)
>
> >
> > Prima aspetti che il primo thread finisce, e quindi esegui il secondo.
> >
> > Uhm, adesso comunque mi hai chiarito proprio le idee, ho provato a
> togliere
> i join, a preparare i due threads insieme e quindi eseguirli
> contemporaneamente ma senza la join, per terminare il programma su Mac devo
> premere un tasto, altrimenti non mi restituisce il terminale, ma niente di
> chè, solo benchmarking.
>
> > > 3) usando la fork [3]
> > >
> > > Ho aggiunto il test per la fork in quanto creando un nuovo processo il
> > > GIL non dovrebbe dare problemi, giusto?
> >
> > Si.
> >
> Perfetto, infatti mi ricordo che già mi consigliasti come metodo per
> scalare
> con python (qualche tempo fà) in alternativa ai thread, l'uso di più
> processi. Dato che voglio provare a non assillare chi utilizza questo o
> quel
> programma vorrei appunto provare a creare processi alla nginx, in base al
> numero di workers specificati in un file di configurazione. Ma prima voglio
> imparare bene come e cosa è python.
>
> >
> > > Beh ecco i risultati sul mio P4 3,00GHz:
> > > 1) sequenziale
> > > ----------------------
> > > real 0m35.363s
> > > user 0m34.831s
> > > sys 0m0.087s
> > > ----------------------
> > > 2) threaded
> > > ----------------------
> > > real 1m30.482s
> > > user 1m25.342s
> > > sys 0m28.125s
> > > ----------------------
> > > 3) forked
> > > ----------------------
> > > real 0m52.938s
> > > user 1m30.927s
> > > sys 0m0.395s
> > > ----------------------
> > >
> >
> > Io ottengo risultati molto diversi.
> >
> > La versione sequenziale:
> > real 0m21.341s
> > user 0m20.185s
> > sys 0m0.260s
> >
> > La versione con threads:
> > real 0m26.279s
> > user 0m22.101s
> > sys 0m5.244s
> >
> > La versione con i processi:
> > real 0m13.160s
> > user 0m10.313s
> > sys 0m0.056s
> >
> Beh la versione sequenziale mi sembra dipenda esclusivamente dalla potenza
> dei processori ed evidentemente i tuoi battono i miei p4 (eheh) in potenza
> di calcolo :p
> Interessante invece la versione coi threads che dimostra appunto come
> anzichè migliorare la situazione la peggiori, anche se nel caso di pochi
> secondi.
>
> Trovo grandiose le prestazioni dei processi, alla faccia di chi li critica
> in favore dei thread (almeno con python). Ha quasi dimezzato le prestazioni
> del calcolo sequenziale e praticamente la metà di quelli che usano i
> threads.
>
>
> > La versione con i threads "corretta" (senza i due join) ha praticamente
> > gli stessi tempi di quella postata da te.
> >
>
> A me addirittura, come ho detto, non libera il terminale automaticamente,
> comunque senza i due join con un solo processore attivo mi pare (adesso non
> ricordo esattamente) mi sembra avesse qualche secondo in meno, ma forse
> complice il lancio contemporaneo dei due threads.
>
> > Uso un Intel(R) Core(TM)2 CPU T7200 @ 2.00GHz
> >
> > Bel procio.
>
> >
> > Ciao Manlio
> >
> Ciao, grazie per il bench. Come saprai il tuo interesse è sempre ben
> gradito
> :)
>
> Buona notte.
>
> --
> Alessandro A.
> -------------- parte successiva --------------
> Un allegato HTML è stato rimosso...
> URL:
> http://lists.python.it/pipermail/python/attachments/20100512/6aa9afd8/attachment.html
>
> ------------------------------
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>
> Fine di Digest di Python, Volume 51, Numero 8
> *********************************************
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20100513/f0566545/attachment.htm
Maggiori informazioni sulla lista
Python