【问题标题】:Comparing MANY date/time objects in Python比较 Python 中的许多日期/时间对象
【发布时间】:2015-11-02 18:08:34
【问题描述】:

我有一个格式为 .csv 的文件:

Username, Datetime
user1, datetime1
user1, datetime2
user2, datetime3
user2, datetime4
user2, datetime5
user3, datetime6
user1, datetime7
user2, datetime8

文件有时可能非常大(有时多达 300,000 多个用户)。我想比较 datetime 对象以查看某个特定用户是否具有彼此相隔 X 天内的 datetime 对象。

执行此任务的有效方法是什么?显然,我不想比较不同用户的 datetime 对象,所以先创建一些数据结构,比如字典,是否明智?

我在想创建一个如下形式的字典可能就足够了:

{user1: [datetime1, datetime2, datetime7], 
user2: [datetime3, datetime4, datetime5, datetime8], ... }

然后迭代每个用户的每个日期时间组合?有没有更快、更有效的方法来进行这种比较?

【问题讨论】:

  • 此列表是否已排序?如果是,可以尝试实现二分查找算法。
  • datetime 比简单的整数时间戳更昂贵。原始文件是否已经按时间排序?您可能只需要保留部分数据集。如果您有内存限制,您可以执行两次,其中第一次通过创建每个用户文件,第二次通过处理文件。这可以通过multiprocessing 来完成,以分散工作。如果此 csv 定期更新,您可以保留现有的每个用户文件,记住您离开的位置,并且只更新新内容。
  • 您也可以尝试使用numpynumpy.loadtxt。一般来说,numpy 在文件和比较方面非常快(天文学家使用它)。

标签: python csv datetime comparison


【解决方案1】:

创建字典意味着一次将所有 300k+ 记录存储在内存中,这可能不是您想要的。

如果对 csv 文件进行排序,首先按用户,然后按时间戳,您只需一次读取和处理一行,这似乎非常有效。

【讨论】:

    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2021-11-21
    • 2019-08-29
    相关资源
    最近更新 更多