使用 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 将 CSV 文件数据转换为 JSON 格式