【发布时间】:2017-01-16 14:04:41
【问题描述】:
我需要快速比较两个不同格式的文件,但我不知道该怎么做。如果有人能指出我正确的方向,我将不胜感激。
我正在使用 CentOS 6,我最熟悉 Python(Python 2 和 Python 3 都可用)。
问题
我正在寻找比较两个大文件的内容(快速)。不幸的是,这些文件的内容不同;在比较它们之前,我需要修改其中的内容。它们组织得不是特别好,所以我不能线性地向下移动并逐行比较。
以下是文件示例:
文件 1 文件 2 作业、时间作业、开始、结束 0123,3-00:00:00 0123,2016-01-01T00:00:00,2016-01-04T00:00:00 1111,05:30:00 1111,2016-01-01T00:00:00,2016-01-01T05:30:00 0000,00:00:05 9090.abc,2016-01-01T12:00:00,2016-01-01T22:00:00 9090.abc,10:00:00 0000,2015-06-01T00:00:00,2015-06-01T00:00:05 ……我想比较具有相同“工作”字段的行的内容,如下所示:
工作文件 1 内容 文件 2 内容 0123 3-00:00:00 2016-01-01T00:00:00,2016-01-04T00:00:00 1111 05:30:00 2016-01-01T00:00:00,2016-01-01T05:30:00 0000 00:00:05 2015-06-01T00:00:00,2015-06-01T00:00:05 9090.abc 10:00:00 2016-01-01T12:00:00,2016-01-01T22:00:00 …………我将对 文件 1 内容 和 文件 2 内容 执行计算并比较两者(针对每一行)。
最有效的方法是什么(匹配行)?
当前系统会针对另一个文件中的每一行完整地遍历一个文件(直到找到匹配项)。此过程可能需要数小时才能完成,并且文件总是在增长。我希望使比较它们的过程尽可能高效,但即使是性能上的微小改进也会产生巨大的影响。
感谢所有帮助。
谢谢!
【问题讨论】:
-
您是否尝试过一次一行地同时读取两个文件,然后只比较您需要的内容?
-
@MooingRawr 是的,当然。但是,文件的内容不一定按相同的顺序排列,因此除非我在没有明显匹配的行上暂停并继续读取另一个文件,否则这将不起作用。我不确定这样一个脚本的性能,但我想它可以与当前系统相媲美(虽然可能稍微快一些,因为它不是从每一行的另一个文件的开头开始)。跨度>
-
所以我猜你有一个未排序的文本文件?将这两者比较起来会很头疼,因为最坏的情况是 O(n^2) 时间。我认为您最好的选择是对文件进行排序(这也将采取措施),这将加快比较速度,或者将它们放入有序的存储数据库中,然后进行比较。我可能是错的。
-
@MooingRawr 这就是我在这一点上的结论。我曾希望使这个用户友好且可移植(适用于多种环境),但文件太杂乱以至于无法实现。幸运的是,内容是静态的,新信息附加到文件末尾,所以我可能会选择一个系统来保存修改后的文件供以后使用(连同日期和时间信息)并在程序使用时更新它,所以只需要修改几千行而不是数百万行。
-
Job是唯一的,还是可以有多个具有相同 id 的行实例并且您都需要它们?
标签: python performance file io