【问题标题】:What python data type lets me manipulate CSV data the best? [closed]什么 python 数据类型可以让我最好地操作 CSV 数据? [关闭]
【发布时间】:2017-09-25 19:01:38
【问题描述】:

我正在尝试跟踪我的应用程序中的“禁止”用户。 用户名,minutes_banned,channel_banned_from

joe,5,general
sally,10,other
bob,50,gaming

我将文件读入一个列表,它由列表组成。

我发现处理这种形式的数据很困难。例如,我很难让它只输出用户名。

而且我也不确定如何跟踪每组数据。如果我以 bob 作为用户名并想检查他被禁止了多长时间.. 我如何将 bob 与 50 联系起来?

谢谢。

【问题讨论】:

  • 好吧,如果它在内存中,那么使用字典而不是遍历列表列表。但问题是将此信息存储在 csv 中;您可以在短期内进行非常简单的(1 小时学习和测试)过渡到 sqlite。然后至少您可以查询数据库,而不是检查 CSV 中的每一行。
  • 这可能是题外话(寻求推荐),但你应该使用pandas
  • @roganjosh 我将它存储在 CSV 中的原因是因为我想在程序崩溃或重新启动它时保持数据完整。我能以某种方式对字典做同样的事情吗?
  • 不是真的,因为它会在内存中(除非你想要像 NoSQL DB 这样的东西)。我的建议只是将数据从 CSV 传输到 Sqlite3(它内置于 Python),您仍然可以将数据存储在磁盘上并非常快速地进行检查。
  • 顺便说一句,被禁止的时间是有问题的......从什么时候开始的分钟?设置禁止分钟时,请考虑 time.utcnow() + (60 minutes_banned) 并保存它。稍后阅读时,请对照当前时间。

标签: python csv types


【解决方案1】:

如果用户名是唯一的并且您不关心特定顺序,请将它们保存在 dict

banned = {'joe': (5, 'general'), 'sally': (10, 'other')}
print "Bob's ban duration is", banned.get('bob', 'forever')

您可以按不确定的顺序获取所有用户名,如下所示:all_usernames = banned.keys() 给出['sally', 'joe']

【讨论】:

  • 直到应用程序崩溃并且所有数据丢失。
  • @roganjosh 你总是可以只腌制字典,如果更新不那么频繁,那么每次更新时都更新文件。
  • @Antimony 是的,但我不明白你为什么要使用 sqlite 来做这件事。
  • 现有的 csv 格式似乎也很合理。 pickle 没有什么问题,但它是一个设计决定,如果 OP 想要更具可读性和可共享性的 csv,那么也没有问题。
  • @tdelaney 我认为我无法在这一点上与您争论,因为您更有经验。如果 CSV 在这里完全合适,那么我认为我对它有个人偏见,而不是客观上。
【解决方案2】:

这看起来像一个 csv 格式的文件,csv 模块似乎是一个不错的起点。 DictReader 将行读入字典,让您可以按名称引用单元格。您可以从那里读取表格(dictslist)。然后,为您最想使用的字段创建索引。索引是另一个dict,它引用了表中的dict

import csv

with open('banned.txt', newline='') as fp:
    reader = csv.DictReader(fp)
    reader.fieldnames = ['username','minutes_banned','channel_banned_from']
    table = list(reader)

user_index = {entry['username']:entry for entry in table}

user = input('check banned user name: ')
if user in user_index:
    print('banned', user_index[user]['minutes_banned'])
else:
    print('invalid user')

【讨论】:

    猜你喜欢
    • 2016-07-22
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多