我有一个包含这样数据的 CSV 文件
15,"I",2,41301888,"BYRNESS RAW","","BYRNESS VILLAGE","NORTHUMBERLAND","ENG"
11,"I",3,41350101,2,2935,2,2008-01-09,1,8,0,2003-02-01,,2009-12-22,2003-02-11,377016.00,601912.00,377105.00,602354.00,10
我正在阅读此内容,然后将不同的行写入不同的 CSV 文件。
但是,在原始数据中,非数字字段周围有引号,因为其中一些字段中包含逗号。
我无法保留引号。
我研究了很多并发现了 quoting=csv.QUOTE_NONNUMERIC
但是现在这导致每个字段周围都有一个引号,我不知道为什么?
如果我尝试其他引用选项之一,如 MINIMAL,我最终会收到一条关于日期值 2008-01-09 不是 float 的错误消息。
我尝试创建一种方言,在 csv 读取器和写入器上添加引号,但我没有尝试过与原始数据完全匹配的结果。
任何人都遇到过同样的问题并找到了解决方案。
最佳答案
在写作时,quoting=csv.QUOTE_NONNUMERIC
保持不加引号的值,只要它们是数字,即。如果它们的类型是 int
或 float
(例如),这意味着它会写出您期望的内容。
您的问题可能是,在读取时,csv.reader
会将其读取的每一行转换为 strings 的 list
(如果如果您足够仔细地阅读文档,您会发现阅读器不会执行自动数据类型转换!
如果您阅读后不执行任何类型的转换,那么当您编写时,您最终会得到引号中的所有内容...因为您编写的所有内容都是一个字符串。
编辑:当然,日期字段将被引用,因为它们不是 数字,这意味着您无法使用标准 csv.writer
获得准确的预期行为。
关于Python CSV 模块 - 引号丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353792/