4

ルート ディレクトリの下のいくつかのフォルダに異なる数の dbf ファイルがあるとしますd:\myfolder。dbf ファイルの内容は次のようになります。

Field1 
11110481123
12150480021
...

Field1の値の下 4 桁のみを含むフィールド (たとえば、) を追加したいと考えていますField2

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

では、削除したいと思いField1ます。

Python のさまざまなフォルダーに散らばっているすべての dbf ファイルを処理するにはどうすればよいですか?

4

2 に答える 2

4

dbfavailable via pypi ( )というモジュールが必要です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 桁を格納するように変更する方が計算量は少なくなります。

于 2012-05-05T14:44:45.170 に答える
1

上記のdbf ライブラリ(および私の他のライブラリである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()は、すべてのテーブルを変更するのではなく、一部のみを変更したい場合に提供する機能です。それらをすべて変更したい場合は、その行を削除できます。

于 2016-03-31T00:26:03.727 に答える