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

2024-09-30 09:22:29 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我是Python新手,我的目标是将不同的大型dbf文件转换为csv文件。我看过不同的代码,但不理解很多部分。下面的代码运行于data1.dbf,而不是data2.dbf。我得到一个错误声明:

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

我确实研究了dbfread的编码,但它说不需要编码……我需要的另一部分是将这些大型DBF转换成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'


Tags: 文件csv代码import编码错误systable
1条回答
网友
1楼 · 发布于 2024-09-30 09:22:29

由于您在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()))

可能会做到这一点-使用例如“pythonthatscript.py foo.dbf”运行脚本时,应该以“foo.dbf.csv”结束

相关问题 更多 >

    热门问题