Я хотел бы различать None
и пустые строки при переходе между структурой данных Python и представлением csv с использованием модуля csv
Python.
Моя проблема в том, что когда я запускаю:
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
по умолчанию имеет значение ''
для обеспечения обратной совместимости)