2016-03-10 70 views
2

我試圖Excel文件轉換爲使用Python DBF(DBASEIII)和我目前的過程是:轉換。CSV到.DBF(DBASEIII)VFP 6.0,一切都變得備註字段

  1. 使用xlrd轉換Excel文件爲.csv
  2. 我拿頭關閉該.csv的我用
  3. 採取新做的.csv和使用DBF模塊(https://pypi.python.org/pypi/dbf)轉換爲DBF

我從c中刪除標題SV文件,我運行以下命令:

table = dbf.from_csv(origfname, filename='test.dbf', field_names=headers, dbf_type='db3') 

截至目前,當過程結束的所有領域成爲備註字段,我怎麼讓他們成爲字符,日期,數字,等等領域?

回答

1

from_csv方法僅用於轉儲到備註字段。

如果你想要更多的控制,那麼你應該跳過csv一步,從xlsdbf,使用xlrddbf

這將需要更多的工作:您必須先用適當的字段創建表,但這是通過遍歷xls表並寫入dbf表的簡單問題。

因此,像這樣:

some_table = Dbf.Table(
     'whatever.dbf', 
     'name C(25); age N(3); history M', 
     codepage='cp1252', 
     ) 

# get data from xlrd (specifics are not correct, psuedo-code only) 
... 
data = [] 
for row in sheet: 
    for cell in row: 
     data.append(cell.value) 
    # back to real code 
    some_table.append(tuple(data)) 
# all data has been transferred 
some_table.close() 

自動生成字段名和列類型,你將需要循環通過電子表格的前幾行,以獲得頭名和值類型。下面是一個例子數據行我迭代通過:

<type 'unicode'> u'PROD' 
<type 'unicode'> u'cclark' 
<type 'float'> 4.0 
<type 'float'> 99.0 
<type 'unicode'> u'501302' 
<type 'unicode'> u'244026' 
<type 'int'> 1 
<type 'float'> 42444.0 
<type 'str'> '' 
<type 'unicode'> u'AB' 
+0

我想一個後續的問題是,當我使用Excel 2003轉換我沒有定義列的寬度。你知道Excel使用的慣例來確定適當的寬度來設置它嗎? –

+0

@JonNgo:Excel中的「width」是可視的,而不是對存儲數據的限制。如果你關心的是正確存儲'float'字段,那麼你可能需要使用'vfp'類型(默認版本爲'3'),它可以讓你指定一個'B'(雙精度浮點數)類型。創建表時使用'dbf_type ='vfp'。 –

+0

我對你的意思有點困惑,抱歉,不是FoxPro專家。所以我會試着解釋我的意思。在Excel中將.xls保存到.dbf(dBaseIII)並在FoxPro中打開後續dbf時,當我修改時,每列將分配一個類型(Num,Char,Date等)和任意寬度。我想我的意思是我想讓我的Python程序與Excel 2003如何將.xls轉換爲.dbf(dBaseIII) –