使用 Python 将 .csv 文件转换为 .dbf?

Posted

技术标签:

【中文标题】使用 Python 将 .csv 文件转换为 .dbf?【英文标题】:Convert .csv file into .dbf using Python? 【发布时间】:2011-05-25 08:34:02 【问题描述】:

如何使用 python 脚本将 .csv 文件转换为 .dbf 文件?我在网上找到了这个piece 的代码,但我不确定它有多可靠。有没有具有此功能的模块?

【问题讨论】:

Google 告诉我fiby.at/dbfpy 和pypi.python.org/pypi/dbf/0.88.16。不过,dbf 格式看起来很简单;您应该能够检查自己发布的代码。 【参考方案1】:

使用dbf package,您可以获得一个基本的csv文件,其代码类似于:

import dbf
some_table = dbf.from_csv(csvfile='/path/to/file.csv', to_disk=True)

这将创建具有相同名称和字符或备注字段以及 f0、f1、f2 等字段名称的表。

对于不同的文件名,使用filename参数,如果你知道你的字段名,你也可以使用field_names参数。

some_table = dbf.from_csv(csvfile='data.csv', filename='mytable',
        field_names='name age birth'.split())

here 提供了相当基本的文档。

披露:我是这个包的作者。

【讨论】:

对我来说效果很好。请注意:csv 不应在您的示例中包含标题,否则标题将被解析为常规行。 我有点困惑:我正在查看 dbf 0.96.005,但无法确定是否支持读写 DBase IV 文件。我现在正在使用 dbfpy,但我渴望最终摆脱 Python 2... dBase IV 尚不支持。 @Ethan 我在从 csv 写入 dbf 时收到错误 Lib\site-packages\dbf.py", line 3637, in add_fields raise FieldSpecError("Maximum field name length is 10. '%s' is %d characters long." % (name, len(name)))。我的 CSV 有标题,但 field_names 参数似乎无法正常工作,你能帮忙吗? —— @SIslam:看起来像旧版本。试试最新的:sudo pip install dbf --upgrade.【参考方案2】:

您不会在网上找到任何读取 CSV 文件并写入 DBF 文件的东西,这样您就可以调用它并提供 2 个文件路径。对于每个 DBF 字段,您需要指定类型、大小和(如果相关)小数位数。

一些问题:

什么软件会使用输出的 DBF 文件?

没有所谓的“the”(一种且唯一的)DBF 文件格式。您需要 dBase III 吗? dBase 4? 7?视觉 FoxPro?等等?

您需要编写的文本字段的最大长度是多少?您有非 ASCII 文本吗?

哪个版本的 Python?

如果您的要求最低(dBase III 格式,没有非 ASCII 文本,文本

【讨论】:

是的,我现在对如何将 .csv 转换为 dbf 有了一些了解。我使用它的软件是 ArcGIS,但是我找不到使用的 .dbf 格式的规范。没有非ASCII文本,python版本为2.6,文本字段最大长度为20个字符。【参考方案3】:

使用csv library 从 csv 文件中读取数据。第三方dbf库可以为你写一个dbf文件。

编辑:最初我列出了dbfpy,但上面的库似乎更新得更积极了。

【讨论】:

看起来像一个功能性的库,如果不是非常 Pythonic 的话。我肯定会把它添加到我的书签中——谢谢你的链接! 最大的缺点似乎是糟糕的文档,这是许多开源项目的问题。 遗憾的是,dbf 的文档非常有限,我什至无法弄清楚如何使用它。有几行示例代码(看起来很简单),但它们不起作用。不过,谢谢你的回答! 这真的很有帮助,我用过dbfpy。【参考方案4】:

据我所知,没有一个是经过精心打磨的。多年来,我不得不多次使用 xBase 文件,并且我不断发现自己在必须这样做时编写代码来执行此操作。在我的一个备份中的某个地方,我有一个非常实用的纯 Python 库来执行此操作,但我不知道它在哪里。

幸运的是,xBase 文件格式并不是那么复杂。当然,您可以找到规范on the Internet。乍一看,您链接到的模块看起来不错,但当然要在使用它之前复制您正在使用的任何数据。

一个可靠的、读/写的、功能齐全的 xBase 库已经在我的 TODO 列表中列出了一段时间......我什至可以在今年剩下的内容中找到它,如果我很幸运......(很遗憾,可能不是)。

【讨论】:

【参考方案5】:

我在这里创建了一个 python 脚本。它应该可以针对任何 csv 布局进行定制。在这可能之前,您确实需要知道您的 DBF 数据结构。该脚本需要两个 csv 文件,一个用于 DBF 标头设置,一个用于正文数据。祝你好运。

https://github.com/mikebrennan/csv2dbf_python

【讨论】:

您的示例使用 dbfpy,不幸的是,它似乎没有得到维护,也没有更新以在 Python3 中使用 - 它使用 CStringIO,a.o。但如果 Python 2 没问题,这个例子应该提供一个快速的开始。

以上是关于使用 Python 将 .csv 文件转换为 .dbf?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Python 将 JSON 文件转换为 CSV

使用 Python 将 CSV 文件数据转换为 JSON 格式

Python - 将 csv 文件转换为 JSON

使用 Python 将 .csv 文件转换为 .dbf?

使用 Python 将 NetCDF 文件转换为 CSV 或文本

使用 python 将 CSV 文件转换为 LIBSVM 兼容的数据文件