使用 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"。
所以我是 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"。