使用Python的adodbapi读取sas7bdat文件

1 投票
1 回答
1167 浏览
提问于 2025-04-18 17:44

我想把一个sas7bdat文件(这是SAS公司的一种文件格式)从SAS导入到Python中。

我知道可以把文件导出为*.csv格式,但我想避免这样做,因为那样会增加我们需要创建的文件数量。

在Visual Basic中有很好的文档可以参考。不过,我想用Python来实现。例如,在VB中你可以写...

Dim cn as ADODB.Connection
Dim rs as ADODB.Recordset

obConnection.Provider = "sas.LocalProvider"
obConnection.Properties("Data Source") = "c:\MySasData"
obConnection.Open

rs.Open "work.a", cn, adOpenStatic, adLockReadOnly, adCmdTableDirect

来打开你的数据集。

但是我在Python中不知道该怎么做。

我可以输入...

import adodbapi

cnstr = 'Provider=sas.LocalProvider;c:\\MySasData'

cn = adodbap.connect(cnstr)

然后可以得到一个游标...

cur = cn.cur()

但除此之外,我就不知道该怎么继续了。我找到一个叫cur.rs的东西,听起来像是记录集,但它的类型是None。

另外,为了避免一些其他的方法...

  1. 我不想在SAS中创建*.csv文件。
  2. 我的Python电脑上没有安装SAS,但安装了OLE DB的提供程序。我知道我提供的VB代码在只读模式下可以工作,而不需要SAS。你可以在这里下载这些驱动程序:http://support.sas.com/downloads/browse.htm?cat=64
  3. 我对SAS不是很精通。老实说,我觉得他们的工具很繁琐,文档也让人困惑,而且速度慢。我注意到还有一些其他的产品叫做"IOMProvider"和"SAS/SHARE"。如果用这些ADO提供程序有更简单的方法,请随意记录下来。不过,我真正想要的是在Python中用相对简单的代码来实现这个功能。
  4. 哦,我知道Python有一个sas7bdat的包,但我们用的是Python 3.3.5,似乎不兼容。而且我也搞不清楚在2.7上怎么用,因为文档不多,甚至有个关于如何使用这个工具的问题到现在都没有人回答。Python sas7bdat模块的使用

谢谢!

1 个回答

0

我没有用SAS测试过,因为我现在没有安装相关的提供程序,但应该是这样的:

cn = adodbapi.connect(cnstr)

# print table names in current db
for table in cn.get_table_names():
    print(table)

with cn.cursor() as c:
    #run an SQL statement on the cursor
    sql = 'select * from your_table'

    c.execute(sql)

    #get the results
    db = c.fetchmany(5)

    #print them
    for rec in db:
        print(rec)

cn.close()

编辑:
我刚找到这个 http://support.sas.com/kb/30/795.html,所以你可能需要使用其他提供程序来实现这个方法,可以看看IOM提供程序 (https://www.connectionstrings.com/sas-iom-provider/http://support.sas.com/documentation/tools/oledb/gs_iom_tasks.htm)

撰写回答