2012-01-23 87 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