簡體   English   中英

在Python中將.dbf批量轉換為.csv

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM