0

関連する関数のコードは次のとおりです。

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 ファイルからサブスクライバー名と電話番号を読み取り、一意の各サブスクライバーのエントリをデータベースに書き込むことになっています。電話番号は一意であるため、キーと値のペアのキーにしたかったのです。しかし、何らかの理由で、データからすべての数字を読み取っているわけではなく、一部のサブスクライバーが欠落しています。名前をキーにすると、予想どおりに欠落しますが(すべての不明なものの重複を排除します)、キーとしての電話番号にはいくつかの番号が完全に欠落しています。ここでロジックを修正する方法についてのアイデアはありますか?

4

1 に答える 1

1

if str(Number)[:1] == '1':おそらくあなたのデータの一部を除外しているように見えます。

それにelseを追加し、拒否しているものをすべて出力します。それらはおそらく間違っているものです。

いずれにせよ、入力データを減らして、使用されていないものを見つけてください。データと、あなたが言った代替案を見ないと、ここで正確な原因を特定するのは困難です.

于 2012-06-12T23:14:56.620 に答える