Ciao Marco,

Il 20/04/2015 14:19, Marco De Paoli ha scritto:
dopo il talk di Alex su codice pythonico/idiomatico...
beh, non posso lasciar passare il seguente caso senza chiedervi un opinione
[snip]

ok, show me the code!

         import openpyxl as pyx
         from .models import MyModel

         CN = XLSX_COLUMN_NAMES

         wb = pyx.load_workbook("sample.xlsx"))
         ws = wb['DB']
         columns = {c.column: CN.get(c.value) for c in ws.rows[0]}

         MyModel.objects.all().delete()
         for row in ws.rows[1:]:
             kwargs = {columns[c.column]: c.value for c in row}
             kwargs.pop(None)
             MyModel(**kwargs).save()

[snip]

E' quel kwargs.pop(None) che non mi piace
Ci ho girato un po' intorno, ma non mi viene in mente come rimuoverlo a meno di
introdurre degli "if" che mi piacciono ancora meno

Potevi mettere un commento sul perchè lo stai chiamando quel pop, tra un mese quello è un WTF assicurato. A quanto capisco io è perchè per qualche motivo ti ritrovi columns[c.column] a None. Questo lo fai probabilmente per prevenire di esplodere quando hai righe malformate con testo su colonne che non hanno intestazione. Se è questo non troverei vergogna a mettere un *esplicito* if c.column in columns nella dict comprehension di kwargs. Ma forse io non sono di gusti così raffinati :)

P.P.S. boh, mi sa che vi ho dato un po' troppo contesto rispetto al problema
vero e proprio.
Ma diciamo che è stata anche l'occasione per citare qualche tecnologia che mi ha
fatto comodo: openpyxl e ... Django!

hai fatto bene

--
Riccardo Magliocchetti
@rmistaken

http://menodizero.it
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a