Добавление значений в поле DBF с использованием Python - PullRequest
0 голосов
/ 30 января 2020

Я хочу создать файл dbf, а затем добавить к нему поля и значения, используя python. Я могу создать файл и поля dbf, но не знаю, как точно добавить значения в соответствующие поля. У меня есть огромный набор данных для выполнения этой операции, поэтому я использую l oop. Вот лишь пример того, какими будут данные. С помощью этого кода создается база данных и добавляются поля, но не значения внутри этих полей. Любая помощь будет оценена.

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()

1 Ответ

0 голосов
/ 31 января 2020

После небольшой очистки кода вам нужно что-то вроде этого:

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)

Я надеюсь, что помогает с вашим пониманием.

...