How to modify dbf files in Python

≯℡__Kan透↙ 提交于 2019-11-30 21:58:16

You would need the module called dbf available via pypi (pip install dbf). Here's a snippet of how you can add and delete fields from a table:

import dbf

table = dbf.Table('t1', 'field1 N(12, 0)')
for record in ((11110481123,), (12150480021,)):
    table.append(record)
table.close()

# extend the existing table
dbf.add_fields('t1', 'field2 N(4, 0)')

table = dbf.Table('t1')
records = table.sql('select *')
for record in records:
    record.field2 = int(str(record.field1)[-4:])
table.close()

dbf.delete_fields('t1', 'field1')

Though it would be less computational intensive to just go over the first field and alter it to store the last 4 digits of its value.

Using the above-mentioned dbf library (plus my other library, antipathy), these are (roughly) the steps you would take:

# untested

import dbf
from antipathy import Path

for path, dirs, files in Path.walk('.'):
    files = [f for f in files if f.ext == '.dbf']
    for db in files:
        if I_want_to_change_this_table(db):
            with dbf.Table(db) as db:
                db.add_fields('Field2 C(4)')
                for record in db:
                    dbf.write(Field2=record.Field1[-4:])
                db.delete_fields('Field1')
                db.pack()

The I_want_to_change_this_table() is a function you provide if you don't want to change every table, just some of them. If you want to change them all you can remove that line.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!