поведение считывателя csv с None и пустой строкой

Я хотел бы различать Noneи пустые строки при переходе между структурой данных Python и представлением csv с использованием модуля csvPython.

Моя проблема в том, что когда я запускаю:

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

Я получаю следующий вывод:

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

Конечно, я мог бы поиграть с dataи data2, чтобы различать Noneи пустые строки с такими вещами, как:

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

Но это частично лишило бы меня интереса к csvмодулю (быстрой десериализации/сериализации, реализованному в C, особенно когда вы имеете дело с большими списками ).

Есть ли csv.Dialectили параметры для csv.writerи csv.reader, которые позволили бы им различать ''и Noneв этом случае использования -?

Если нет, будет ли интерес к установке патча для csv.writer, чтобы включить этот вид туда и обратно? (Возможно, параметр Dialect.None_translate_toпо умолчанию имеет значение ''для обеспечения обратной совместимости)

19
задан martineau 16 February 2016 в 15:31
поделиться