CSV读取器对None和空字符串的处理行为
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', '']]
当然,我可以通过以下方式处理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
参数,以确保向后兼容性。)