【问题标题】:convert csv file to dbf将csv文件转换为dbf
【发布时间】:2012-02-16 16:32:45
【问题描述】:

我有很多 csv 文件,想将它们转换为 dbf 文件。 我从 Ethan Furman 那里找到了代码(见下文) 它真的很好用 - 非常感谢 - 但我的 csv 文件有一个分号作为分隔符。因此,使用代码 python 将我所有的数据放入一列,但我有 5 列。 如何更改分隔符?

这里是链接: 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 提供了相当基本的文档。

【问题讨论】:

  • 我不确定您指的是什么代码。看来您缺少一些链接。我检查了code.activestate.com/recipes/362715-dbf-reader-and-writer 的代码,它似乎从一种 dbf(Xbase)格式转换为另一种(二进制),而不是从 CSV 转换为 dbf。这是正确的代码吗?

标签: python csv dbf


【解决方案1】:

查看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:

【讨论】:

  • 也许添加 'import csv' 只是为了让它完整
  • @JohanLundberg 我添加了缺少的导入。感谢您的反馈。
猜你喜欢
  • 2011-05-25
  • 2013-10-13
  • 2011-04-23
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多