我有很多 csv 文件,想将它们转换为 dbf 文件。我找到了 Ethan Furman 的代码(见下文),它工作得非常好 - 非常感谢 - 但我的 csv 文件以分号作为分隔符。因此,使用代码 python 将所有数据放入一列中,但我有 5 列。如何更改分隔符?
这里是链接: 使用Python将.csv文件转换为.dbf?
尤其:
使用 dbf 包,您可以获得一个基本的 csv 文件,其代码类似于以下内容:
Run Code Online (Sandbox Code Playgroud)import dbf some_table = dbf.from_csv(csvfile='/path/to/file.csv', to_disk=True)这将创建具有相同名称、字符或备注字段以及 f0、f1、f2 等字段名称的表。
对于不同的文件名,请使用该
filename参数,如果您知道字段名称,也可以使用该field_names参数。Run Code Online (Sandbox Code Playgroud)some_table = dbf.from_csv(csvfile='data.csv', filename='mytable', field_names='name age birth'.split())此处提供了相当基本的文档。
查看dbf代码,我没有看到任何传递方言的方法,因此您可以按如下方式转换文件:
import csv
reader = csv.reader(open('input.csv'), delimiter=';')
writer = csv.writer(open('output.csv', 'w'))
for row in reader:
writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)
注意:这将正确引用内容中已包含逗号的行。
编辑:如果您愿意修补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:
Run Code Online (Sandbox Code Playgroud)