唯一键和Python字典

2024-05-13 02:37:33 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是相关功能的代码:

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文件中读取订户名称和电话号码,然后为每个唯一的订户写入一个条目到数据库中。我希望电话号码是键/值对中的键,因为它是唯一的。但由于某些原因,它没有从数据中读取所有的数字,它缺少了一些订户。如果我把名字作为键,它会像预期的那样丢失(消除所有未知项的重复),但是作为键的电话号码完全丢失了一些数字。有什么办法解决这里的逻辑问题吗?在


Tags: csvcsvfilenamenumberdb电话号码conndict
1条回答
网友
1楼 · 发布于 2024-05-13 02:37:33

在我看来,if str(Number)[:1] == '1':可能正在过滤掉你的一些数据。在

再加上一个else并打印出它拒绝的任何内容。这些可能就是出问题的地方。在

不管怎样,缩减你的输入数据,找出哪个没有被使用。如果没有看到数据和你所说的哪个有效的替代方法,很难在这里确定确切的原因。在

相关问题 更多 >