首页 > 解决方案 > 使用 Python 在 DBF 字段中添加值

问题描述

我想创建一个 dbf 文件,然后使用 python 向它添加字段和值。我可以创建 dbf 文件和字段,但不知道如何在相应字段中添加值。我有一个巨大的数据集来执行这个操作,这就是我使用循环的原因。这只是数据的示例。使用此代码,将创建 dbf 并添加字段,但不会添加这些字段中的值。任何帮助,将不胜感激。

import dbf
dctClmVal ={'a':'19', 'b':'76', 'c':'59', 'd':}    
lstFields = ['a','b','c','d']
out_dbf_Path= r"C:\Users\ms\Stats\new.dbf"

db=dbf.Table(out_dbf_Path)
db.open(mode= dbf.READ_WRITE)
for clm in lstFields:
    db.add_fields( clm + " C(50)")

for field in lstFields:
    if(field.upper() in db.field_names):
        db.append({'field=dctClmVal[field]'})
db.close()

标签: pythondbf

解决方案


稍微清理一下代码后,您需要的是这样的:

import dbf

records = ({'a':'19', 'b':'76', 'c':'59', }, )

lstFields = ['a C(50)','b C(50)','c C(50)','d C(50)']
out_dbf_Path= "new.dbf"

db = dbf.Table(out_dbf_Path, lstFields)
db.open(mode=dbf.READ_WRITE)

for dctClmVal in records:
    db.append(dctClmVal)

db.close()

并阅读您写的内容:

>>> with db:
...   print db[0]
... 

  0 - a         : u'19                                                '
  1 - b         : u'76                                                '
  2 - c         : u'59                                                '
  3 - d         : u'                                                  '

来自评论:

如果我的字典具有与每个键对应的列表格式的值,例如:

records = {
        'a': ['2','4','6'],
        'b': ['3','5','7'],
        'c': ['8','9','0'],
        }

如何更新我的数据库?

这比将单个记录的字段分布在不同的列表中要好得多。如果一个列表损坏,它可能会影响每一行。

注意:我从 () 中删除了它们,records因为它们没有做任何事情。

#
# combine into individual records
#
real_records = []
for field, values in records.items():
    for i, value in enumerate(values):
        if len(real_records) == i:
            real_records.append({})
        real_records[i][field] = value
#
# now add to db
#
for record in real_records:
    db.append(record)

我希望这有助于您的理解。


推荐阅读