python - 使用 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”
解决方案
由于您在 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”。
推荐阅读
- c++ - 检查向量是否
包含字符串 - bash - How to send stdin to redis channel in realtime?
- python - 在字典内的列表上附加列表
- python - 无法理解pytube“第一”方法
- css - 我使用角度响应轮播库。但我不能改变箭头设计和圆点设计
- linux - 紧凑的 shellcode 打印一个寄存器指向的以 0 结尾的字符串,给定 puts 或 printf 在已知的绝对地址?
- android - 无法在本机反应中解析配置“:classpath”的所有工件
- python - 在 Zapier 用 python 读取 html 文件
- android - 如何使用 kotlin 在 android 中添加 http 日志拦截器和另一个拦截器?
- android - 如何解决 Xamarin.Android 的目标框架错误