【发布时间】: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 定期更新,您可以保留现有的每个用户文件,记住您离开的位置,并且只更新新内容。 -
您也可以尝试使用
numpy和numpy.loadtxt。一般来说,numpy 在文件和比较方面非常快(天文学家使用它)。
标签: python csv datetime comparison