Python CSV模块-缺少引号

Python CSV模块-缺少引号,python,csv,double-quotes,Python,Csv,Double Quotes,我有一个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文件 但是,在原始

我有一个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\u NONNUMERIC
,但是现在每个字段都有一个引号,我不知道为什么

如果我尝试其他报价选项(如MINIMAL),我最终会收到一条关于日期值的错误消息,2008-01-09,而不是浮动

我曾尝试创建一种方言,在csv读写器上添加引用,但我尝试过的任何操作都无法获得与原始数据完全匹配的结果


任何人都有同样的问题并找到了解决方案。

在编写时,
quoting=csv.QUOTE_NONNUMERIC
只要值是数字,即如果值的类型是
int
float
(例如),这意味着它将编写您期望的值

您的问题可能是,在读取时,
csv.reader
会将它读取的每一行转换为字符串的
列表(如果您足够仔细地阅读文档,您会发现读取器不会执行自动数据类型转换

如果您在阅读之后没有执行任何类型的转换,,那么当您编写时,您将以引号结束,因为您编写的所有内容都是字符串

编辑:当然,日期字段将被引用,因为它们不是数字,这意味着您无法使用标准的
csv.writer

尝试获得“精确匹配”来获得准确的预期行为对原始数据进行排序是一项困难的工作,而且可能毫无结果。
quoting=csv.QUOTE_NONNUMERIC
在所有字段周围加引号,因为在读取字段时,每个字段都是字符串


您担心的是一些“引用”输入字段可能有逗号通常没什么大不了的。如果您在其中一个带引号的字段中添加了逗号并使用默认的writer,则带有逗号的字段将在输出中自动被引用。

您确定有问题吗?您描述的行为是正确的:
csv
模块将字符串括在q中uotes仅在正确解析它们所必需的情况下使用。因此,您应该期望仅在包含逗号、换行符等的字符串周围看到引号。除非您在读回输出时出错,否则没有问题。

源中的引号从一开始就不一致。在源中,与I一样,非数字的字符串周围有引号描述。这是一致的。日期不是数字。并且,一旦读入,就没有数字了。