【问题标题】:Using python to compare one file with another for missing entries使用 python 比较一个文件与另一个文件是否缺少条目
【发布时间】:2019-03-27 21:14:46
【问题描述】:

我有两个文件。我想获取 Master.txt 中但不在 Subset.txt 中的新订单的 id 列表。 Master.txt 还包含现有订单(EXIST),这些订单不在 Subset.txt 中,因此它不是文件的 1:1 比较。

foundCount = 0
notFoundCount = 0
notFoundDict = []

for i, logLine in enumerate(open(master, "r").readlines()):
    if len(logLine ) > 1:
        if "NEW" in log_line:
            newItemDict = dict(item.split(":") for item in newItem.split(","))
            id = newItemDict ['id']

            for i, subsetLogLine in enumerate(open(subset, "r").readlines()):
                if id in subsetLogLine and "NEW" in subsetLogLine:
                    foundCount += 1
                    break
                else: 
                    notFoundCount += 1
                    notFoundDict.append(id)

不幸的是,它在 Master.txt 的第一行中获得了唯一 id,将其与 Subset.txt 中的一行匹配,但所有其他行都没有该 id,因此它将所有这些 id 添加到 notFoundDict .

所以我希望它搜索所有文件 B,如果在整个文件中找不到,则附加该 id,如果找到则中断。

Master.txt
{"Type":"NEW","id":201753427,"time":"08:11:57.545","title":"string"}
{"Type":"NEW","id":201753195,"time":"08:11:58.616","title":"string"}
{"Type":"EXIST","id":201753195,"time":"08:11:59.639","title":"string"}
{"Type":"UPDATE","id":201753195,"time":"08:13:57.319","title":"string"}
{"Type":"UPDATE","id":201753195,"time":"08:15:51.119","title":"string"}
{"Type":"NEW","id":201753199,"time":"08:19:13.114","title":"string"}


Subset.txt
{NEWORDID="201753427" ORDTYPE="NEW" ORIGIN="LocationA" USERNAME="..." TIME="08:11:57.645"}
{NEWORDID="201753195" ORDTYPE="NEW" ORIGIN="LocationC" USERNAME="..." TIME="08:11:57.619"}
{NEWORDID="201753199" ORDTYPE="NEW" ORIGIN="LocationC" USERNAME="..." TIME="08:19:13.114"}

【问题讨论】:

  • 请贴一个简单的例子,每个文件中包含一两行数据,用于测试目的
  • 已更新。如您所见,两个文件的格式/内容略有不同。但是 OrderId 和 Order 的类型应该是唯一的。但是主文件的 id 可以是相同的,但在加上 'type' 时是唯一的
  • 从文件 A->subsea.txt 和文件 B->master.txt 更改问题并参考 NewOrdID 等。以便于理解。

标签: python file search


【解决方案1】:

您是否考虑过不同的方法?

将文件 1 中的所有新订单 ID 加载到集合中。

将文件 2 中的所有新订单 ID 加载到集合中。

然后找到文件 1 集中所有不在文件 2 集中的对象。

除非文件异常大,否则似乎是解决问题的更简单方法。

【讨论】:

  • Master.txt 中最多可以有 60,000 个条目,subset.txt 中可以有 5000 到 20000 之间的任何内容。这个很大吗?
  • 这实际上可以工作。我将不得不重写我的脚本,因为我并没有真正从subset.txt 中解析出id。我对 id 的 master.txt 进行了所有处理。所以我必须做一些重写并稍后更新。
  • 我已经使用了 100,000 多个对象的列表/集合,没有任何问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2015-06-22
  • 1970-01-01
  • 2023-02-07
  • 2012-08-31
  • 2018-08-22
  • 1970-01-01
相关资源
最近更新 更多