Python CSV模块引号丢失

2024-10-04 11:28:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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阅读器和writer上添加引用,但是我没有尝试任何结果来获得与原始数据完全匹配的结果。在

任何人都有同样的问题并找到了解决办法。在


Tags: 文件csv数据原始数据raw数字eng引号
3条回答

你确定你有问题吗?您描述的行为是正确的:csv模块只在正确解析字符串需要的情况下才会用引号将字符串括起来。因此,您应该只看到包含逗号、换行符等的字符串的引号。除非您在读回输出时遇到错误,否则没有问题。在

试图获得原始数据的“精确匹配”是一项困难的工作,而且可能是徒劳的。quoting=csv.QUOTE_NONNUMERIC在所有字段周围加上引号,因为当您读入每个字段时,每个字段都是一个字符串。在

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

写入时,quoting=csv.QUOTE_NONNUMERIC只要值是数字,也就是说,如果它们的类型是int或{}(例如),这意味着它将写入您期望的值。在

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

如果你在阅读之后不进行任何形式的转换,那么当你写作的时候,你就会把所有的东西都加上引号。。。因为你写的东西都是字符串。在

编辑:当然,日期字段会被引用,因为它们是而不是数字,这意味着您无法使用标准的csv.writer获得确切的预期行为。在

相关问题 更多 >