Suppose I have different number of dbf files in some folders under the root directory, d:\\myfolder
. The content of a dbf file looks like the following:
Field1
11110481123
12150480021
...
I want to add a field (say, Field1
) that contains only the last 4 digits of the values in Field2
.
Field1 Field2
11110481123 1123
12150480021 0021
... ...
Then, I want to delete Field1
.
How can I do the job for all the dbf files that are scattered across different folders in Python?
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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.