[英]Batch conversion of .dbf to .csv in Python
我有〜300個帶.dbf文件的文件夾,我想將其轉換為.csv文件。
我使用os.walk
查找所有.dbf文件,然后使用dbfpy
模塊將每個.dbf文件轉換為.csv。 它似乎正在正確地查找和讀取.dbf文件,但沒有將它們轉換為.csv。 我相信csv.writer代碼是個問題。 我沒有收到任何錯誤,但文件保持為.dbf。
我的代碼基於此處的代碼。
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'語句(上下文管理器)將關閉文件並在最后刷新緩沖區,而不需要明確地執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.