[Python] idio[ma]ticità
Riccardo Magliocchetti
riccardo.magliocchetti a gmail.com
Lun 20 Apr 2015 15:04:40 CEST
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
Maggiori informazioni sulla lista
Python