2012-01-23 65 views
4

私は多くのcsvファイルを持っており、それらをdbfファイルに変換したいと考えています。 Ethan Furmanのコードを見つけました(下記参照) これは本当にうまくいきます - ありがとう - しかし、私のcsvファイルには区切り文字としてセミコロンがあります。コードでは、Pythonはすべてのデータを1つの列に入れますが、5つの列があります。 区切り文字を変更するにはどうすればよいですか?ここcsvファイルをdbfに変換する

リンク:特に Convert .csv file into .dbf using Python?

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

これは、テーブルを作成します。

DBFパッケージを使用しますが、このようなコードの基本的なCSVファイルを取得することができます同じ名前、文字フィールドまたはメモフィールド、フィールド名は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/のコードをチェックし、それはCSVからではなく、あるdbf(Xbase)フォーマットから別の(バイナリ)フォーマットに変換するようです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) 

注:これは、適切にすでに含まれている行を引用しますがその内容の一部としてカンマ。

編集:あなたはすべてのあなたのcsvファイルを変換避けるために、パラメータとしてdelimiterを受け入れるようにdbf.from_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

おそらく完了するために 'インポートcsv' –

+0

@ JohanLundberg私は不足しているインポートを追加しました。ご意見をいただきありがとうございます。 – jcollado

関連する問題