2012-05-05 119 views
4

ルートディレクトリの下のいくつかのフォルダに異なる番号のdbfファイルがあるとします(d:\myfolder)。 DBFファイルの内容は、次のようになります。Pythonでdbfファイルを変更する方法

Field1 
11110481123 
12150480021 
... 

私はフィールド(たとえば、Field1)を追加したいField2内の値の最後の4桁の数字が含まれています。

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

次に、Field1を削除します。

Pythonのさまざまなフォルダに分散しているすべてのdbfファイルに対して、どのようにジョブを実行できますか?

答えて

4

dbfというモジュールが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桁を保存するために、それを変更するの集中少ない計算だろうけど。

+0

((11110481123、)、(12150480021、)):ここでは、私は多くのレコードを持っている場合、どのようにこれらのレコードを取ることができます。私はすべてのレコードを入力することはできないと思う。 –

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()あなたはドン場合はあなたが提供する機能です」すべてのテーブルを変更したいだけで、一部のテーブルは変更する必要があります。それらをすべて変更したい場合は、その行を削除することができます。

関連する問題