2016-07-01 2 views
2

私は旧式のFoxPro2.xテーブルを使ってPython 2.7でEthan Furmanバージョン0.96.005(最新のもの)のdbf-moduleを使用しています。削除されたレコードを無視したいので、tbl = dbf.Table(dbf_path)を割り当てた後にtbl.use_deleted = Falseと設定します。私はテーブルを開ける前後にこれを設定しようとしましたが、with tbl.open('read-only') as tbl: ...ですが、 これもそれも効果がないようです。レコードレベルでpythonでdbf-moduleを使用して削除されたレコードを無視するには?

私が試した:

for rec in tbl: 
    if not rec.has_been_deleted and ... 

をそれは私を与えた:

FieldMissingError: 'has_been_deleted: no such field in table' 

私はs.th.をしています違う?または、その機能がもう使用できなくなっています(5年前のもの - Visual Fox Pro and Pythonを参照)。

答えて

3

use_deletedおよびhas_been_deletedは存在しなくなり、機能is_deletedに置き換えられました。

だから、この時点で、あなたの選択肢は(from dbf import is_deletedを想定)されています。その後、

# check each record 
for rec in tbl: 
    if is_deleted(rec): 
     continue 

または

# create active/inactive indices 

def active(rec): 
    if is_deleted(rec): 
     return DoNotIndex 
    return dbf.recno(rec) 

def inactive(rec): 
    if is_deleted(rec): 
     return recno(rec) 
    return DoNotIndex 

active_records = tbl.create_index(active) 

deleted_records = tbl.create_index(inactive) 

およびそれらを反復処理:

# check active records 
for rec in active_records: 
    ... 
関連する問題