繁体   English   中英

如何在Python中修改dbf文件

[英]How to modify dbf files in Python

假设我在根目录下的某些文件夹中有不同数量的dbf文件, d:\\myfolder dbf文件的内容如下所示:

Field1 
11110481123
12150480021
...

我想添加一个字段(比如说Field1 ),它只包含Field2值的最后4位数字。

Field1          Field2
11110481123     1123
12150480021     0021
...             ...

然后,我想删除Field1

如何为分散在Python中不同文件夹中的所有dbf文件执行此任务?

您需要通过pypi( pip install dbf )获得名为dbf的模块。 这是一个如何添加和删除表中字段的片段:

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

虽然只是越过第一个字段并改变它以存储其值的最后4位数,但计算密集程度较低。

使用上面提到的dbf库 (加上我的其他库, 反感 ),这些( 大致 )是你要采取的步骤:

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

I_want_to_change_this_table()是您提供的函数,如果您不想更改每个表,只需更改其中一些表。 如果你想更改它们,你可以删除该行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM