forked from wireservice/csvkit
/
dbase.py
44 lines (31 loc) · 970 Bytes
/
dbase.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/env python
"""
Note: dbf is only supported/imported for Python 2.
"""
import dbf
import six
from csvkit import table
def dbf2csv(f, **kwargs):
"""
Convert a dBASE .dbf file to csv.
"""
with dbf.Table(f.name) as db:
headers = db.field_names
column_ids = range(len(headers))
data_columns = [[] for c in headers]
for row in db:
for i, d in enumerate(row):
try:
data_columns[i].append(six.text_type(row[column_ids[i]]).strip())
except IndexError:
# Non-rectangular data is truncated
break
columns = []
for i, c in enumerate(data_columns):
columns.append(table.Column(column_ids[i], headers[i], c))
tab = table.Table(columns=columns)
o = six.StringIO()
output = tab.to_csv(o)
output = o.getvalue()
o.close()
return output