从访问转换为逗号分隔的文件?

从访问转换为逗号分隔的文件?

我正在寻找一种将 .mdb(访问)文件更改为 .csv(逗号分隔文件)的免费方法。有什么想法吗?

编辑:

我需要能够转换大量的.mdb 文件...因此,自动化的东西会很好。

答案1

您可以使用数据库工具将 Access 文件导出为 CSV。这篇博文介绍如何使用 Python 实现自动化

答案2

MS Access 数据库文件是完整数据库的容器,包括架构、索引和表数据。.csv 文件应该是单个数据库表的转储,才具有合理用途。您通常不需要某种文件类型到文件类型的转换器,而是需要一种从 Access 数据库中提取 .csv 文件中所需信息的方法。

如果您有 MS Access,您只需在 Access 中打开数据库,右键单击每个表并选择“导出”。在文件对话框中,您可以选择导出格式,其中包括纯文本格式,例如 .csv。如果您的 Access 安装或版本不直接支持导出为纯文本格式,您可以按照 rjmccann101 的建议,先导出到 MS Excel 工作簿,这样即使使用最旧版本的 Access 也可以正常工作。或者,您可以对表指定查询,然后以相同的方式导出其结果。

除此之外,Access 数据文件是自包含的数据库。如果您手头没有 MS Access 副本,而只有 .mdb 文件,则可以连接到它并使用 SQL 查询表数据,例如使用简单的 Perl 脚本:

#/usr/bin/perl

use strict;
use warnings;

my $dbh = DBI->connect('dbi:ODBC:driver=microsoft access driver (*.mdb); dbq=path_and_name_of_your.mdb');
my $sql = "select * from table_name";
my $sth = $dbh->prepare( $sth );
while( my @row = $sth->fetchrow_array()) {
    print( join( ',', @row ) . "\n" );
}
$sth->finish()
$dbh->disconnect()

答案3

查看此 StackOverflow 线程

  1. 对仅包含您想要的列的表进行查询,然后保存。
  2. 选择查询,然后转到文件->导出(选择另存为“文本 *.txt、*cvs 等”)并按照提示进行操作

答案4

对于批量处理我推荐使用这样的脚本(Perl 中的示例):

#/usr/bin/perl  

use strict;  
use warnings;  
use DBI;  

my $dir = "/your/path/to/mdb/files";  
opendir( DIR, "$dir" );  
while( readdir( DIR )) {  
    my $filename = $_;  
    next unless( $filename =~ /.mdb$/ ); # skip non-Access entries  
    my $dbh = DBI->connect('dbi:ODBC:driver=microsoft access driver (*.mdb); dbq=$dir/$filename');  
    # This select will retrieve all Access objects that are Tables and not system tables
    my $sql_outer = 'select name from MSysObjects where type = 1 and name not like "MSys*"';  
    my $sth_outer = $dbh->prepare( $sql_outer );  
    while( my @table_name = fetchrow_array( $sth_outer )) {  
        open( OUT, ">", "$dir/$filename.$table_name.csv" );  
        $sql_inner = "select * from $table_name";  
        $sth_inner = $dbh->prepare( $sql_inner );  
        while( my @row = fetchrow_array( $sth_inner )) {  
            print( OUT join( ',', @row ) . "\n" );  
        }  
        sth_inner->finish();  
        close( OUT );  
    }  
    $sth->outer->finish();  
    $dbh->disconnect();  
}  
closedir( DIR )  

这会将每个 .mdb 文件“转换”为一组 .csv 文件,这些文件以它们的数据库容器(.mdb 文件)和表名命名。如果您不需要实际的逗号分隔值,而是需要竖线、分号或任何分隔数据,只需相应地编辑打印语句即可。

该示例要求所有.mdb 文件驻留在 $dir 变量中硬编码的同一目录中,但这可以轻松更改,以便您可以在命令行上交出目录名称或单个.mdb 文件名。

请注意,该示例并不可靠,也不安全,为了便于阅读,我省略了任何错误检测和更正。
还请注意,Windows 上也有 Perl 实现(例如 ActiveState Perl),并且该示例应该可以在 Windows 环境中工作,只需对路径符号进行轻微调整即可。

相关内容