【问题标题】:Malformed CSV quoting格式错误的 CSV 引用
【发布时间】:2016-03-25 23:51:23
【问题描述】:

我使用 CSV 格式将数据从 SAS 传递到 Python。 SAS 使用的报价格式有问题。像 "480 КЖИ" ОАО 这样的字符串没有被引用,但 Python csv 模块认为它们是。

dat = ['18CA4,"480 КЖИ" ОАО', '1142F,"""Росдорлизинг"" Российская дор,лизинг,компания"" ОАО"']
for i in csv.reader(dat):
    print(i)
>>['18CA4', '480 КЖИ ОАО']
>>['1142F', '"Росдорлизинг" Российская дор,лизинг,компания" ОАО']

第二个字符串很好,但我需要480 КЖИ ОАО 字符串为"480 КЖИ" ОАО。在csv 模块中找不到这样的选项。也许可以强制proc export 引用所有" 字符?

UPD:这是一个类似的问题Python CSV : field containing quotation mark at the beginning UPD2:@Quentin 已询问详细信息。它们在这里:我将 SAS8.2 连接到 9.1 服务器。我使用proc format cntlout=..; proc download.. 从服务器端下载自定义格式数据。所以我得到了一个类似字典的数据集<key>, <value>。然后我使用 proc export 通过 DDE 接口将这个数据集以 CSV 格式传递给 Python。但proc export 仅引用我理解的包含分隔符(逗号)的字符串。所以我认为,我也需要 SAS 引用引号或 Python 只取消引用那些包含逗号的字符串。

更新:从 proc export 通过 DDE 切换到使用修改后的 SAS7BDAT Python 模块直接读取数据集极大地提高了性能。我摆脱了上面的问题。

【问题讨论】:

  • 如果您需要 SAS 方面的建议,建议您在问题中添加更多内容,描述您在 SAS 数据集中拥有的值,以及您希望写入 CSV 的值。
  • 您是如何要求 SAS 创建 CSV 文件的? SAS 通常会在带有嵌入引号的字符串周围放置引号。因此,您的问题值将在 CSV 文件中显示为 """480 КЖИ"" ОАО"
  • @Quentin 我添加了详细信息
  • @Tom 也许我在某处错了,但proc export 仅在包含字段分隔符(逗号)时才为我引用字符串。 DDE 确实传递了 ...,18CA4,"480 КЖИ" ОАО 之类的字符串,而 csv 模块会感到困惑。))
  • Export 与数据步骤的作用相同,因为它只是为您生成数据步骤。您是在谈论使用 EXPORT 写入 Excel 还是 CSV?如果您写入 CSV 文件,那么额外的引号就在那里。也不要使用 Excel 查看 CSV 文件,因为它会转换数据。用文本编辑器查看。

标签: python csv import sas export


【解决方案1】:

如果值中已经包含引号,SAS 将添加额外的引号。

data _null_;
  file log dsd ;
  string='"480 КЖИ" ОАО';
  put string;
run;

生成这个结果:

"""480 КЖИ"" ОАО"

也许引号在从 SAS 到 Python 的流程中的其他点被删除?尝试将 CSV 文件保存到磁盘并让 Python 从磁盘文件中读取。

【讨论】:

  • 我将在 36 小时后尝试使用测试数据集。)还有一个选择:使用 sas7bdat Python 模块直接从临时文件夹(WORK 库)中读取数据集。但它需要一些速度测试
  • 看。它仅使用空格分隔符引用! docs.google.com/document/d/…
  • 哦,我明白了,它引用了所有字符串,因为它们都包含空格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 2018-04-24
  • 1970-01-01
相关资源
最近更新 更多