2012-01-23 5 views
4

나는 많은 csv 파일을 가지고 있으며 dbf 파일로 변환하려고합니다. Ethan Furman의 코드를 찾았습니다. (아래 참조) 정말 잘 작동합니다. 감사합니다.하지만 CSV 파일에는 구분 기호로 세미콜론이 있습니다. 그래서 코드 python은 하나의 열에 모든 데이터를 저장하지만 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입니다.

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

참고 :이 이미 포함되어 제대로 행을 인용 할 것이다 당신이 당신의 파일을 변환 할 수 있도록 다음과 같이 dbf 코드를 보면

+0

을 당신이 언급하는지 코드 확실하지 않다 . 몇 개의 링크가 누락 된 것 같습니다. http://code.activestate.com/recipes/362715-dbf-reader-and-writer/에서 코드를 확인하고 CSV가 아닌 한 dbf (Xbase) 형식을 다른 (이진) 형식으로 변환하는 것으로 보입니다. dbf. 그것이 올바른 코드입니까? – jpaugh

답변

3

, 나는 방언을 전달하는 데 어떤 방법이 표시되지 않습니다 내용의 일부로 쉼표.

편집 : 당신이 모든 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

아마도 'import csv'를 추가하면 완료됩니다. –

+0

@JohanLundberg 누락 된 가져 오기를 추가했습니다. 귀하의 의견에 감사드립니다. – jcollado

관련 문제