Comportamento do leitor csv com None e string vazia

Eu gostaria de distinguirNone e strings vazias ao ir e voltar entre a estrutura de dados Python e a representação csv usando o Pythoncsv módulo.

Meu problema é que quando eu corro:

import csv, cStringIO

data = [['NULL/None value',None],
        ['empty string','']]

f = cStringIO.StringIO()
csv.writer(f).writerows(data)

f = cStringIO.StringIO(f.getvalue())
data2 = [e for e in csv.reader(f)]

print "input : ", data
print "output: ", data2

Eu recebo a seguinte saída:

input :  [['NULL/None value', None], ['empty string', '']]
output:  [['NULL/None value', ''], ['empty string', '']]

Claro, eu poderia brincar comdata edata2 distinguirNone e seqüências de caracteres vazias com coisas como:

data = [d if d!=None else 'None' for d in data]
data2 = [d if d!='None' else None for d in data2]

Mas isso parcialmente derrotaria meu interesse pelocsv módulo (desserialização rápida / serialização implementada em C, especialmente quando você está lidando com listas grandes).

Tem algumacsv.Dialect ou parâmetros paracsv.writer ecsv.reader que lhes permitiria distinguir entre'' eNone neste caso de uso?

Se não, haveria interesse em implementar um patch paracsv.writer para ativar esse tipo de ida e volta? (Possivelmente umDialect.None_translate_to parâmetro padrão para'' para garantir compatibilidade com versões anteriores)

questionAnswers(5)

yourAnswerToTheQuestion