1. 程式人生 > 其它 >xls/csv檔案轉換成dbf檔案

xls/csv檔案轉換成dbf檔案

轉至:https://blog.csdn.net/linhai1028/article/details/80211252

編寫的一個小指令碼,主要是利用python中的pandas,xlrd,dbfpy包將excel中的xls/csv檔案中轉化成dbf檔案


一、安裝相關包

pip install xlrd
pip install dbfpy

二、實現

程式碼如下:

# -*- coding: utf-8 -*-

__author__ = 'lihailin'  
__mail__ = '[email protected]'  
__date__ = '2018-05-04'  
__version__ = 1.0
import pandas as pd import os,sys from dbfpy import dbf import csv def xls2csv(xlsFile, csvFileName): # excel檔案轉csv data = pd.read_excel(xlsFile, 'pcp_lookup', index_col=0) data.to_csv(csvFileName, encoding='utf-8') def genDbfHeader(dbfDb, csvHeader): '''生成dbf檔案表頭 Args: dbfDb: Dbf類例項 csvHeader: list, 其值為字串用於建立dbf表頭的欄位
''' for filed in csvHeader: # print filed,'--------' tmp = (filed, 'C', 25) # 定義欄位 dbfDb.addField(tmp) return dbfDb def writeDbfData(dbfDb, dbfData): '''寫資料到dbf檔案 Args: dbfDb: Dbf類例項 dbfData: dict, key為Dbf的header中的欄位 ''' for onedata in
dbfData: # print onedata rec = dbfDb.newRecord() for key in onedata.keys(): # 對每條記錄的所有欄位寫資料 # print(key) rec[key] = onedata[key] rec.store() def csv2dbf(csvFile, dbfFile): # csv檔案轉dbf檔案 with open(csvFile, 'rb') as csvfile: # dbf寫表頭 reader = csv.reader(csvfile, delimiter=',', quotechar='|') header_row = next(reader) db = dbf.Dbf(dbfFile, new=True) db = genDbfHeader(db, header_row) with open(csvFile, 'rb') as csvfile: # 寫dbf資料 reader = csv.DictReader(csvfile) # 字典形式 writeDbfData(db, reader) db.close() def main(): # 遍歷一個資料夾下的所有.xlsx檔案,並將其轉換成.dbf檔案 xlsDictory = '.' #資料夾 for xlsFile in os.listdir(xlsDictory): tmp = xlsFile.split('.')[0] # if '.xlsx' in xlsFile: # continue # if '.csv' not in xlsFile: # continue csvFileName = '%s.csv' % tmp if '.xlsx' in xlsFile: # 如果是.xlsx先轉成.csv xls2csv(xlsFile, csvFileName) dbfFileName = '%s.dbf' % tmp csv2dbf(csvFileName, dbfFileName) os.system('mkdir dbfFile') os.system('mv *.dbf dbfFile') if __name__ == '__main__': main()

環境

  1. python2.7

參考資料

  1. dbfpy doc
  2. 如何將excel檔案轉化成CSV格式
  3. python csv