使用 Python 3+ 获取错误将 DBF 文件转换为 CSV

Converting DBF file to CSV using Python 3+ getting errors

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

UnicodeDecodeError: 'ascii' codec can't decode byte...

我确实研究了 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' object has no attribute '_meta'

由于您在 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"。