遇到一个task, 要把.mbd格式的数据库导出。可惜我的机器没有比较熟悉的VC. 想down vs6也没有合适的, .net又太大. 突然想到前些日子装了python, 却一直没用过,
python的粉丝到处散布"用我python, 无所不能"的传言, 何不拿它来试试看?
首先,baidu一下"python 访问access" 结果还不少. 经过尝试,觉得下面的方法最简单.
#-*- coding: utf-8 -*-
import sys
import os
import win32com.client
conn = win32com.client.Dispatch(r'ADODB.Connection')
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=d:\\db1.mdb;'
conn.Open(DSN)
rs = win32com.client.Dispatch(r'ADODB.Recordset')
rs_name = 'table1'
rs.Open('[' + rs_name + ']', conn, 1,2) #此函数中参数1,2 是什么值怎么设,我还不知道,还在试。
a=0
while a < rs.RecordCount :
if a % 5000 == 0 :
dir_no = a / 5000
dirpath = "d:\\tmp%d" % (dir_no)
os.mkdir(dirpath)
fname = "%s\\rec%d" % (dirpath, a)
title = rs.Fields.Item(1).Value
str1 = "<html><head><title>%s</title></head><body>\n" % (title)
output=open(fname, 'wb')
output.write(str1.encode('utf-8'))
output.close()
if a % 1000 == 0 :
print "%d\n" % a
#print "%d %d\t%s" % (a,num,title)
rs.MoveNext();
a = a+1
conn.Close();
需要注意的问题是: 输出中文到文件一定要用.encode('utf-8')把它转化成utf-8, 因为:
系统缺省的编码是ascii, 遇到汉字会出错. .encode('gbk')对于某些字符也会出错.