如何从python中的csv文件创建mdb文件? [英] how to create a mdb file from a csv file in python?

查看:129
本文介绍了如何从python中的csv文件创建mdb文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有几个csv文件,我需要将这些文件转换为mdb格式.我以这篇文章为起点尝试了答案:

如何在Python?

来源:

from comtypes.client import CreateObject

access = CreateObject('Access.Application')

from comtypes.gen import Access

DBEngine = access.DBEngine
db = DBEngine.CreateDatabase('test.mdb', Access.DB_LANG_GENERAL)


db.BeginTrans()

db.Execute("CREATE TABLE test (ID Text, numapples Integer)")
db.Execute("INSERT INTO test VALUES ('ABC', 3)")

db.CommitTrans()
db.Close()

但是我收到以下错误:

Traceback (most recent call last):
  File "C:\Documents and Settings\rkelly1\Desktop\New Folder (6)\testwrite.py", line 3, in ?
access = CreateObject('Access.Application')
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 242, in CreateObject
return _manage(obj, clsid, interface=interface)
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 188, in _manage
obj = GetBestInterface(obj)
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 112, in GetBestInterface
interface = getattr(mod, itf_name)
AttributeError: 'module' object has no attribute '_Application'

我要做的就是获取一个.csv文件,并使用mdb格式创建一个数据库.我对sql有一些经验,但对创建访问数据库文件没有经验....

我并不是说这是正确的解决方案....如果您有更好的解决方案,请告诉我

全新安装comtypes后第一次运行脚本时,出现以下错误:

# Generating comtypes.gen._4AFFC9A0_5F99_101B_AF4E_00AA003F0F07_0_9_0
# Generating comtypes.gen._2DF8D04C_5BFA_101B_BDE5_00AA0044DE52_0_2_4
# Generating comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0
# Generating comtypes.gen.stdole
Traceback (most recent call last):
  File "C:\Documents and Settings\rkelly1\Desktop\New Folder (6)\testwrite.py", line 3, in ?
    access = CreateObject('Access.Application')
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 242, in CreateObject
    return _manage(obj, clsid, interface=interface)
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 188, in _manage
    obj = GetBestInterface(obj)
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 110, in GetBestInterface
    mod = GetModule(tlib)
  File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 112, in GetModule
    mod = _CreateWrapper(tlib, pathname)
  File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 176, in _CreateWrapper
    generate_module(tlib, ofi, pathname)
  File "C:\Python24\Lib\site-packages\comtypes\tools\tlbparser.py", line 716, in generate_module
    gen.generate_code(items.values(), filename=pathname)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 238, in generate_code
    self.generate_all(items)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 186, in generate_all
    self.generate(item)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 182, in generate
    mth(item)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 689, in ComInterface
    self.generate(itf.get_head())
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 182, in generate
    mth(item)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 710, in ComInterfaceHead
    self.generate(base.get_head())
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 182, in generate
    mth(item)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 616, in External
    comtypes.client.GetModule(ext.tlib)
  File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 112, in GetModule
    mod = _CreateWrapper(tlib, pathname)
  File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 188, in _CreateWrapper
    mod = _my_import(fullname)
  File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 26, in _my_import
    return __import__(fullname, globals(), locals(), ['DUMMY'])
  File "C:\Python24\lib\site-packages\comtypes\gen\_2DF8D04C_5BFA_101B_BDE5_00AA0044DE52_0_2_4.py", line 82
    ( ['retval', 'out'], POINTER(POINTER(IDispatch)), 'ppidisp' )),
COMMETHOD([dispid(1610743809), 'propget'], HRESULT, 'Creator',
                                                               ^
SyntaxError: invalid syntax

解决方案

我建议的第一件事是尽可能升级到python 2.7.

第二,您是否尝试过 win32com ?

这是一个测试脚本,可以完成上面的操作:

import win32com.client
import os

def main():
    db_path = r'C:\temp.mdb'
    if os.path.exists(db_path):
        os.remove(db_path)

    db_eng = win32com.client.gencache.EnsureDispatch("DAO.DBEngine.36")
    db = db_eng.CreateDatabase(db_path, win32com.client.constants.dbLangGeneral)

    db.Execute("CREATE TABLE test (ID Text, numapples Integer)")
    db.Execute("INSERT INTO test VALUES ('ABC', 3)")

    db.Close()


if __name__ == '__main__':
    main()

I have several csv files that I need to transfer over to mdb format. I tried the answer in this post as a starting point:

How do you create a mdb database file in Python?

Source:

from comtypes.client import CreateObject

access = CreateObject('Access.Application')

from comtypes.gen import Access

DBEngine = access.DBEngine
db = DBEngine.CreateDatabase('test.mdb', Access.DB_LANG_GENERAL)


db.BeginTrans()

db.Execute("CREATE TABLE test (ID Text, numapples Integer)")
db.Execute("INSERT INTO test VALUES ('ABC', 3)")

db.CommitTrans()
db.Close()

But I received the following errors:

Traceback (most recent call last):
  File "C:\Documents and Settings\rkelly1\Desktop\New Folder (6)\testwrite.py", line 3, in ?
access = CreateObject('Access.Application')
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 242, in CreateObject
return _manage(obj, clsid, interface=interface)
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 188, in _manage
obj = GetBestInterface(obj)
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 112, in GetBestInterface
interface = getattr(mod, itf_name)
AttributeError: 'module' object has no attribute '_Application'

All I need to do is take a .csv file, and create a database with it in mdb format. I have some experience with sql but not with creating access data base files....

EDIT:

I am not proposing that this is the right solution.... If you have a better one please let me know

EDIT: The first time the script runs after a fresh install of comtypes I get these errors:

# Generating comtypes.gen._4AFFC9A0_5F99_101B_AF4E_00AA003F0F07_0_9_0
# Generating comtypes.gen._2DF8D04C_5BFA_101B_BDE5_00AA0044DE52_0_2_4
# Generating comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0
# Generating comtypes.gen.stdole
Traceback (most recent call last):
  File "C:\Documents and Settings\rkelly1\Desktop\New Folder (6)\testwrite.py", line 3, in ?
    access = CreateObject('Access.Application')
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 242, in CreateObject
    return _manage(obj, clsid, interface=interface)
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 188, in _manage
    obj = GetBestInterface(obj)
  File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 110, in GetBestInterface
    mod = GetModule(tlib)
  File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 112, in GetModule
    mod = _CreateWrapper(tlib, pathname)
  File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 176, in _CreateWrapper
    generate_module(tlib, ofi, pathname)
  File "C:\Python24\Lib\site-packages\comtypes\tools\tlbparser.py", line 716, in generate_module
    gen.generate_code(items.values(), filename=pathname)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 238, in generate_code
    self.generate_all(items)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 186, in generate_all
    self.generate(item)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 182, in generate
    mth(item)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 689, in ComInterface
    self.generate(itf.get_head())
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 182, in generate
    mth(item)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 710, in ComInterfaceHead
    self.generate(base.get_head())
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 182, in generate
    mth(item)
  File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 616, in External
    comtypes.client.GetModule(ext.tlib)
  File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 112, in GetModule
    mod = _CreateWrapper(tlib, pathname)
  File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 188, in _CreateWrapper
    mod = _my_import(fullname)
  File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 26, in _my_import
    return __import__(fullname, globals(), locals(), ['DUMMY'])
  File "C:\Python24\lib\site-packages\comtypes\gen\_2DF8D04C_5BFA_101B_BDE5_00AA0044DE52_0_2_4.py", line 82
    ( ['retval', 'out'], POINTER(POINTER(IDispatch)), 'ppidisp' )),
COMMETHOD([dispid(1610743809), 'propget'], HRESULT, 'Creator',
                                                               ^
SyntaxError: invalid syntax

解决方案

First thing I would suggest is upgrading to python 2.7 if at all possible.

Second, have you tried win32com?

Here's a test script that does what you have above:

import win32com.client
import os

def main():
    db_path = r'C:\temp.mdb'
    if os.path.exists(db_path):
        os.remove(db_path)

    db_eng = win32com.client.gencache.EnsureDispatch("DAO.DBEngine.36")
    db = db_eng.CreateDatabase(db_path, win32com.client.constants.dbLangGeneral)

    db.Execute("CREATE TABLE test (ID Text, numapples Integer)")
    db.Execute("INSERT INTO test VALUES ('ABC', 3)")

    db.Close()


if __name__ == '__main__':
    main()

这篇关于如何从python中的csv文件创建mdb文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆