関連する関数のコードは次のとおりです。
def populateSubscribers(csvfile, db):
conn = sqlite3.connect(db)
conn.text_factory = str #bugger 8-bit bytestrings
cur = conn.cursor()
subscriber_dict = {}
# read values from tab-delimited csv file
reader = csv.reader(open(csvfile, "rU"), delimiter = '\t')
for Number, Name, Message, Datetime, Type in reader:
if str(Number)[:1] == '1':
tmpNumber = str(Number)[1:]
Number = int(tmpNumber)
# check to ensure name/number not null
if Number and Name:
# add unique subscribers to dictionary
subscriber_dict[Number] = Name
else:
print 'Subscriber missing name or number'
# insert unique subscribers into subscriber table
for number, name in subscriber_dict.items():
cur.execute('INSERT OR IGNORE INTO subscriber (name, phone_number) VALUES (?,?)', (name, number))
conn.commit()
cur.close()
conn.close()
print '...Successfully populated subcriber table.'
csv ファイルからサブスクライバー名と電話番号を読み取り、一意の各サブスクライバーのエントリをデータベースに書き込むことになっています。電話番号は一意であるため、キーと値のペアのキーにしたかったのです。しかし、何らかの理由で、データからすべての数字を読み取っているわけではなく、一部のサブスクライバーが欠落しています。名前をキーにすると、予想どおりに欠落しますが(すべての不明なものの重複を排除します)、キーとしての電話番号にはいくつかの番号が完全に欠落しています。ここでロジックを修正する方法についてのアイデアはありますか?