CSV读取器对None和空字符串的处理行为

6 浏览
0 Comments

CSV读取器对None和空字符串的处理行为

在使用Python的csv模块在Python数据结构和csv表示之间来回转换时,我想区分None和空字符串''。我的问题是,当我运行以下代码时:

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', '']]

当然,我可以通过以下方式处理datadata2来区分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.Dialectcsv.writercsv.reader的参数中是否有可以区分''None的选项?

如果没有,是否有兴趣实现一个补丁来使csv.writer能够支持这种来回转换?(可能是一个默认为''Dialect.None_translate_to参数,以确保向后兼容性。)

0