寫入數據轉換成dbf,當我得到這個錯誤:錯誤在Python
DbfError: unable to modify fields individually except in with or Process()
如何解決呢?
這是我代碼:
with dbf.Table("aa.dbf") as table:
for record in table:
record[3] = 200
寫入數據轉換成dbf,當我得到這個錯誤:錯誤在Python
DbfError: unable to modify fields individually except in with or Process()
如何解決呢?
這是我代碼:
with dbf.Table("aa.dbf") as table:
for record in table:
record[3] = 200
dbf
是,與其讓一個完全獨立的數據結構與其他大多數DB包不同(一幫行作爲元組,例如)你的工作直接與dbf文件本身。
我發現自己跑到了這個問題,當我一次更新多個字段:
record.name = 'Some Name'
record.age = current_year -birth_year
record.hair_color = base_color * sun_tint
如果一個錯誤的第一場發生後的任何時間我有隻有部分更新的記錄,因此不再內部一致。
要解決這個問題,我添加的代碼,這是種喜歡犯在每記錄的基礎,並且方法來激活它與with
或Process
:如果
with record: # capture current values
record.field1 = something
record.field2 = something_else
record.field3 = another_thing
# now some other code
現在,發生錯誤,原始值被恢復;如果沒有錯誤發生,則將新值保存到磁盤上的dbf
表中。
除了with
上的記錄,你也可以在一堆記錄使用Process
,或者你可以迴避的問題,並收集記錄外的數據,然後立即它寫:所以
for record in table:
new_data = {}
new_data['field1'] = 'a name'
new_data['field2'] = an_age
dbf.write(record, new_data)
,要回到您的代碼,修復它的最簡單方法可能是:
with dbf.Table("aa.dbf") as table:
for record in dbf.Process(table):
record[3] = 200
很酷,這真是太好了,謝謝,問題解決了。 dbf是一個很好的lib。 – UnZike
縮進是否正如我們所看到的那樣? –
已更新yet.sorry。 – UnZike