Python中.dbf到.csv的批量转换

2024-06-06 22:41:11 发布

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

我有大约300个带有.dbf文件的文件夹要转换为.csv文件。

我使用os.walk查找所有.dbf文件,然后使用dbfpy模块将每个.dbf文件转换为.csv。它似乎正在正确地查找和读取.dbf文件,但没有将其转换为.csv。我相信csv.writer代码就是问题所在。我没有收到任何错误,但文件保持为.dbf。

下面的代码基于找到的代码here

import csv
from dbfpy import dbf
import os

path = r"\Documents\House\DBF"


for dirpath, dirnames, filenames in os.walk(path):
    for filename in filenames:
        if filename.endswith('.DBF'):
            in_db = dbf.Dbf(os.path.join(dirpath, filename))
            csv_fn = filename[:-4]+ ".csv"
            out_csv = csv.writer(open(csv_fn,'wb'))

        names = []
        for field in in_db.header.fields:
            names.append(field.name)
        out_csv.writerow(names)


        for rec in in_db:
            out_csv.writerow(rec.fieldData)

        in_db.close()

Tags: 文件csvpath代码inimportfordb
1条回答
网友
1楼 · 发布于 2024-06-06 22:41:11

您拥有的原始文件将保留为dbf。实际上并不是要替换它,而是创建一个新的csv文件。我认为问题在于,写入磁盘的操作永远不会发生。我怀疑csv编写器没有刷新文件缓冲区。

我看到的另一个问题是out-csv是有条件创建的,因此如果在该目录中有其他扩展名不同的文件,则会遇到问题。

尝试使用上下文管理器:

for dirpath, dirnames, filenames in os.walk(path):
    for filename in filenames:
        if filename.endswith('.DBF'):
            csv_fn = filename[:-4]+ ".csv"
            with open(csv_fn,'wb') as csvfile:
                in_db = dbf.Dbf(os.path.join(dirpath, filename))
                out_csv = csv.writer(csvfile)
                names = []
                for field in in_db.header.fields:
                    names.append(field.name)
                out_csv.writerow(names)
                for rec in in_db:
                    out_csv.writerow(rec.fieldData)
                in_db.close()

“with”语句(上下文管理器)将关闭文件并在结尾刷新缓冲区,而无需显式执行此操作。

相关问题 更多 >