gpt4 book ai didi

Python以最有效的方法比较两组大量数据

转载 作者:搜寻专家 更新时间:2023-10-30 21:53:05 24 4
gpt4 key购买 nike

我必须比较 xls 格式的大量数据库转储以分析日常更改(严重,对吧?)。我目前正在以尽可能向后的方式执行此操作,并使用 xlrd 将 xls 转换为 csv 文件,然后运行 ​​diffs 来比较它们。

因为它是一个数据库,而且我没有办法知道在删除项目之后数据是否保持相同的顺序,所以我无法在文件之间比较 x 行到 x 行,所以做元组列表或其他东西对我来说不是最有意义的。

我基本上需要找到可能发生在任何行上的每一个变化,不管该行在实际转储中的位置如何,我能想到的唯一真正的“查找”是 SKU 作为唯一 ID(它是一个产品表来自古老的数据库系统),但我需要知道的不仅仅是删除或添加的产品,因为它们可以修改定价或该项目中的任何其他内容。

我应该使用套装吗?一旦我将这个数据库文件的 75 多千行加载到一个“集合”中,我的 ram 使用会变得歇斯底里吗?

我考虑将 xls 的每一行作为一个大的串联字符串加载到一个集合中。这是一个有效的想法吗?我基本上可以获得一组不同行的列表,然后在原始数据库文件中的这些行之后返回以找到我的实际差异。

我从未处理过像这样规模的数据解析。我主要只是在寻找任何建议,不要让这个过程变得比它必须的更荒谬,我来到这里是因为没有真正找到对我的情况来说足够具体的东西,感觉像是很好的建议。提前致谢。

最佳答案

Should I be using sets?

可能不会。然而,这个问题太模糊了,无法回答。

And once I've loaded 75+ thousand lines of this database file into a "set", is my ram usage going to be hysterical?

没有。 75000 个对象并不多。这不是大规模的。它甚至还算不上庞大。

Python 为您提供 http://docs.python.org/library/difflib.html这可以帮助您创建稍微更优化的算法。

由于您要转储数据库,因此最好将其转储为 CSV 文件而不是 XLS 文件。 CSV 文件更易于使用。

这是使用 CSV 的暴力破解。

import csv
with open('yesterday.csv','rb') as yesterday:
rdr= csv.DictReader( yesterday )
baseline= {}
for row in rdr:
baseline[ row['key'] ]= row
with open('today.csv', 'rb' ) as today:
rdr= csv.DictReader( today )
update= {}
for row in rdr:
if baseline[row['key']] == row:
continue
# You have a delta

关于Python以最有效的方法比较两组大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com