2012-01-23 85 views
4

我有很多csv文件,並且想將它們轉換爲dbf文件。 我發現Ethan Furman的代碼(見下文) 它的工作非常好 - 非常感謝 - 但我的csv文件以分號爲分號。因此,使用代碼python把我所有的數據放入一列,但我有5列。 如何更改分隔符?將csv文件轉換爲dbf

這裏的鏈接: Convert .csv file into .dbf using Python?

尤其是:

使用DBF包你可以得到類似的代碼這是一個基本的CSV文件:

import dbf 
some_table = dbf.from_csv(csvfile='/path/to/file.csv', to_disk=True) 

這將創建一個表具有相同的名稱以及字符或備註字段以及f0,f1,f2等的字段名稱。

對於不同的文件名,使用filename參數,如果您知道您的字段名稱,則還可以使用field_names參數。

some_table = dbf.from_csv(csvfile='data.csv', filename='mytable', 
     field_names='name age birth'.split()) 

相反的基本文件可用here

+0

我不知道你指的是什麼碼。看起來你錯過了幾個鏈接。我檢查了http://code.activestate.com/recipes/362715-dbf-reader-and-writer/上的代碼,它似乎將一個dbf(Xbase)格式轉換爲另一個(二進制),而不是從CSV轉換爲DBF。這是正確的代碼? – jpaugh

回答

3

望着dbf代碼,我看不出有任何的方式來傳遞一種方言,所以你可能會改變你的文件內容如下:

import csv 
reader = csv.reader(open('input.csv'), delimiter=';') 
writer = csv.writer(open('output.csv', 'w')) 
for row in reader: 
    writer.writerow(row) 

注:這將報價已經包含正確的行逗號作爲其內容的一部分。

編輯:如果你願意修補dbf.from_csv接受delimiter作爲參數,以避免將您的所有CSV文件,這應該工作:

--- dbf.py.orig 2012-01-23 12:48:32.112101218 +0100 
+++ dbf.py 2012-01-23 12:49:59.468534408 +0100 
@@ -4502,13 +4502,14 @@ 
     print str(table[0]) 
    finally: 
     table.close() 
-def from_csv(csvfile, to_disk=False, filename=None, field_names=None, extra_fields=None, dbf_type='db3', memo_size=64, min_field_size=1): 
+def from_csv(csvfile, to_disk=False, filename=None, field_names=None, extra_fields=None, dbf_type='db3', memo_size=64, min_field_size=1, 
+    delimiter=','): 
    """creates a Character table from a csv file 
    to_disk will create a table with the same name 
    filename will be used if provided 
    field_names default to f0, f1, f2, etc, unless specified (list) 
    extra_fields can be used to add additional fields -- should be normal field specifiers (list)""" 
- reader = csv.reader(open(csvfile)) 
+ reader = csv.reader(open(csvfile), delimiter=delimiter) 
    if field_names: 
     field_names = ['%s M' % fn for fn in field_names] 
    else: 
+0

+1,我刪除了我剛纔使用的答案.replace(「,」,「;」) –

+0

也許只是爲了完成而添加'import csv' –

+0

@JohanLundberg我添加了缺少的導入。感謝您的反饋意見。 – jcollado