gpt4 book ai didi

python - 无和空字符串的 CSV 阅读器行为

转载 作者:IT老高 更新时间:2023-10-28 21:02:04 25 4
gpt4 key购买 nike

当使用 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 参数默认为 '' 以确保向后兼容。)

最佳答案

The documentation暗示你想要的东西是不可能的:

To make it as easy as possible to interface with modules which implement the DB API, the value None is written as the empty string.

这在 writer 类的文档中,表明它适用于所有方言,并且是 csv 模块的固有限制。

我支持更改这一点(以及 csv 模块的各种其他限制),但人们可能希望将此类工作卸载到不同的库中,并保持 CSV 模块简单(或在至少尽可能简单)。

如果您需要更强大的文件读取功能,您可能希望查看 numpy、scipy 和 pandas 中的 CSV 读取功能,我记得它们有更多选择。

关于python - 无和空字符串的 CSV 阅读器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11379300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com