新しいフィールドを追加したい dbf ファイルがいくつかあります。そのために、dbfpyを使用して元の dbf を開き、すべてのフィールド (または保持したいフィールド) とレコードをコピーしてから、それらのフィールドと必要な新しいフィールドを含む新しいファイルを作成します。1 つの細かい点を除いて、すべてがうまく機能しています。元のフィールドの型を取得する方法がわからないため、元のフィールドの型を保持することができません。私がやっていることは、新しいファイルのすべてのフィールドを「C」(文字) として作成することです。これは、今のところ必要なもので機能しますが、最終的には問題になる可能性があります。
本当の問題は、利用可能なドキュメントがないことです。パッケージファイルを検索してそこにある例を探しましたが、この質問に対する答えが見つかりませんでした (「緑がかった」だけでは見つけられなかった可能性があります) 私はまだ python を使用しています... 私は間違いなく専門家ではありません)。
コードの例:
from dbfpy import dbf
import sys
org_db_file = str(sys.argv[1])
org_db = dbf.Dbf(org_db_file, new = False)
new_db_file = str(sys.argv[2])
new_db = dbf.Dbf(new_db_file, new = True)
#Obtain original field names:
fldnames = []
fldsize = {}
for names in org_db.fieldNames:
fldnames.append(names)
fldsize[name] = 0
#Cycle thru table entries:
for rec in org_db:
#Cycle thru columns to obtain fields' name and value:
for name in fldnames:
value = str(rec[name])
if len(value) > fldsize[name]:
fldsize[name] = len(value)
#Copy original fields to new table:
for names in fldnames:
new_db.addField((names, "C", fldsize[name]))
#Add new fields:
new_fieldname = "some_name"
new_db.addField((new_fieldname, "C", 2))
#Copy original entries and store new values:
for rec in org_db:
#Create new record instance for new table:
new_rec = new_db.newRecord()
#Populate fields:
for field in fldnames:
new_rec[field] = rec[field]
#Store value of new field for record i:
new_rec[new_fieldname] = "some_value"
new_rec.store()
new_db.close()
お時間をいただきありがとうございます。乾杯。