gpt4 book ai didi

python - 在 Python 中将 .dbf 批量转换为 .csv

转载 作者:太空狗 更新时间:2023-10-30 03:03:34 24 4
gpt4 key购买 nike

我有大约 300 个包含 .dbf 文件的文件夹,我想将它们转换为 .csv 文件。

我正在使用 os.walk 查找所有 .dbf 文件,然后使用 dbfpy 模块的 for 循环将每个 .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()

最佳答案

您拥有的原始文件将保留为 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' 语句(上下文管理器)将关闭文件并在最后刷新缓冲区,您无需显式执行此操作。

关于python - 在 Python 中将 .dbf 批量转换为 .csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18435983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com