首页 > 解决方案 > 使用 Python 3+ 将 DBF 文件转换为 CSV 出现错误

问题描述

所以我是 Python 新手,我的目标是将不同的大型 dbf 文件转换为 csv 文件。我查看了不同的代码并且不理解很多部分。以下代码适用于 data1.dbf,但不适用于 data2.dbf。我收到一条错误消息:

UnicodeDecodeError:“ascii”编解码器无法解码字节...

我确实研究了 dbfread 的编码,但它说不需要编码......我需要的另一部分是将这些大型 dbfs 放入 csv 中。如果我使用 dbfread,我不了解将其放入 csv 文件的代码。

import sys
import csv
from dbfread import DBF

file = "C:/Users/.../Documents/.../data2.dbf"
table = DBF(file)
writer = csv.writer(sys.stdout)
writer.writerow(table.field_names)
for record in table:
    writer.writerow(list(record.values()))

这是使用 dbf 库的另一个尝试。

import dbf  # instead of dbfpy
for table in sys.argv[1:]:
    dbf.export(table, header = True)

这个是从使用语句“ python dbf2csv_EF.py data1.dbf ”提示的命令运行的,在尝试我的两个 dbf 文件时会产生不同的错误。错误是:

...AttributeError:“str”对象没有属性“_meta”

标签: pythoncsvdbf

解决方案


由于您在 Windows 上并正在尝试写入sys.stdout,我认为(部分)您的第一个问题是 Windows 控制台不是非常精通 Unicode,您应该改为写入文件。

假设是这种情况,就像

import sys
import csv
from dbfread import DBF

for file in sys.argv[1:]:
    csv_file = file + ".csv"
    table = DBF(file, encoding="UTF-8")
    with open(csv_file, "w") as outf:
        writer = csv.writer(outf)
        writer.writerow(table.field_names)
        for record in table:
            writer.writerow(list(record.values()))

可能会成功 - 使用例如“python thatscript.py foo.dbf”运行脚本应该让你最终得到“foo.dbf.csv”。


推荐阅读