我正在使用Ethan Furman的 Python 庫dbf將許多 dbf 檔案轉換為 csv。它為此非常有效。我想在轉換程序中進一步編輯一些欄位,但不確定如何做。具體來說,我想用空字串替換僅包含 1 個或多個空格的字串欄位,(例如,“” 替換為“”),將包含“00000000”的日期欄位替換為空字串“”。如果有人能描述如何在轉換程序中編輯欄位和寫出更新的記錄,我將不勝感激。顯然,我可以撰寫一個簡單的輔助腳本來編輯轉換程序中輸出的 csv 檔案,但如果可能的話,我想一步完成所有操作。這是我用來轉換檔案的代碼:
import csv
import dbf
import os
import sys
folder=sys.argv[1]
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
if filename.endswith('.DBF'):
db=dbf.Table(filename, ignore_memos=True)
db.open()
csv_fn = filename[:-4] ".csv"
dbf.export(db, filename=csv_fn, format='csv', header=True)
uj5u.com熱心網友回復:
默認情況下,使用DBF表時回傳的資料型別很簡單-即int,str,bool,datetime.datetime,等,但你可以讓你自己的資料型別,并有代替那些使用在指定它們default_data_types的引數:
db = dbf.Table(
filename,
ignore_memos=True,
default_data_types={
'C': my_white_space_stripping_data_type,
'D': my_empty_date_str_data_type,
},
)
幸運的是,dbf已經提供了四種增強的資料型別:
Char-- 自動去除尾隨空格,并忽略尾隨空格進行比較Logical-- 支持True,False, andNone(None當欄位值不是 true 或 false 時回傳 -- 我見過?,' ', 和其他奇怪的垃圾)Date-- 支持空日期,例如00000000,并將它們顯示為''DateTime-- 支持空的日期/時間,并將它們顯示為''
通常,如果您使用一種增強型資料型別,您可能需要全部使用它們,因此您可以只傳遞一個字串而不是字典:
db = dbf.Table(
filename,
ignore_memos=True,
default_data_types='enhanced',
)
現在,當匯出 csv 檔案時,會洗掉尾隨空格,并且空日期欄位變為''.
請記住,空的邏輯欄位將變為'?'而不是'',因此您可能需要更長的形式來指定dicttodefault_data_types并且只覆寫Cand D。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/335580.html
