【发布时间】: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