Python CSV 模块 - 引号丢失

标签 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 文件。

但是,在原始数据中,非数字字段周围有引号,因为其中一些字段中包含逗号。

我无法保留引号。

我研究了很多并发现了 quoting=csv.QUOTE_NONNUMERIC 但是现在这导致每个字段周围都有一个引号,我不知道为什么?

如果我尝试其他引用选项之一,如 MINIMAL,我最终会收到一条关于日期值 2008-01-09 不是 float 的错误消息。

我尝试创建一种方言,在 csv 读取器和写入器上添加引号,但我没有尝试过与原始数据完全匹配的结果。

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

最佳答案

在写作时,quoting=csv.QUOTE_NONNUMERIC 保持不加引号的值,只要它们是数字,即。如果它们的类型是 intfloat(例如),这意味着它会写出您期望的内容。

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

如果您阅读后不执行任何类型的转换,那么当您编写时,您最终会得到引号中的所有内容...因为您编写的所有内容都是一个字符串。

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

关于Python CSV 模块 - 引号丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353792/

相关文章:

python - 在 Redis 中使用数据库实现命名空间有哪些优缺点?

python - Pandas :根据列中的条件测试替换记录

python - phantomjs 不支持 windows 机器上的 flash 播放器

python - 如何使用 Python csv writer 在字符串周围添加单引号?

python - mysql-connector 不会导入到 pycharm 中的脚本中

python - 一种将非常大的 csv 数据写入 SQL 数据库的方法

C++读取csv文件

c++ - 如何在 C++ 中将字符串传递给双引号

excel - 如何在vba中的字符串中加上双引号?

MySQL Load data infile -- 双引号中的双引号值如 "a "double"quoted value"