假设我在根目录d:\myfolder
下的某些文件夹中有不同数量的dbf文件。 dbf文件的内容如下所示:
Field1
11110481123
12150480021
...
我想添加一个字段(例如Field1
),其中只包含Field2
中值的最后4位数。
Field1 Field2
11110481123 1123
12150480021 0021
... ...
然后,我想删除Field1
。
如何为分散在Python中不同文件夹的所有dbf文件执行此任务?
答案 0 :(得分:4)
您需要通过pypi(dbf
)提供名为pip install 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位数字会减少计算量。
答案 1 :(得分:1)
使用上述dbf library(以及我的其他库antipathy),这些是(大致)您将采取的步骤:
# 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()
是您提供的功能,如果您不想更改每个表,只需更改其中一些表。如果你想更改它们,你可以删除该行。