Python:如何从一个XLSX中搜索字符串到另一个XLSX文件中?

时间:2015-07-15 16:26:44

标签: python excel search find openpyxl

我有两个XLSX文件(Cookies和Cream),我想知道A列(在Cookie中)每行中的值是否存在于D列的某一行中(在Cream中)。

使用openpyxl,我得到了以下代码:

for mrow in range(1, Cookies.get_highest_row() +1):
    for arow in range(1, Cream.get_highest_row() +1):
        if cookies['A' + str(mrow)].value == cream['D' + str(arow)].value:
               print(cookies['A' + str(mrow)].value)
               break

尽管这确实按预期工作,但这需要很长时间才能执行,因为cookie包含大约7000行,而cream有超过24,000行。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

这是我制定的内容,但请注意,这不使用openpyxl包的任何特殊方法(处理它)。但是,它应该足以加快你的工作。该算法总体上更快(不再是n ^ 2无意义......)并且避免了openpyxl中的一些陷阱(所有单元格的内存分配,请参阅http://openpyxl.readthedocs.org/en/latest/tutorial.html中间的警告)如果有人可以通过各种手段改进它请在评论中告诉我,我还在学习。

ISBN:1.1.1.1
Genre:Thriller
Seller_Company:XYZ
Seller_Broker:Brook
Buyer_Company: NULL
Buyer_Broker:NULL

使用此方法,并通过检查否定值,过滤它等来分析返回的对象

答案 1 :(得分:0)

openpyxl允许您直接访问列,但您仍需要自己检查单元格。你的代码是这样的:

cookies = load_workbook("cookies.xlsx")
cream = load_workbook("cream.xlsx")
ws1 = cookies['sheetname']
ws2 = cream['sheetname2']

cookies_a = ws1.columns[0]
cream_d = ws1.columns[4]

for c1, c2 in zip(cookies_a, cream_d):
    if c1.value == c2.value:
         break

如果您的文件非常大,这将会很慢。可以使用解析代码在字符串和使用它们的单元格之间创建参考图形,但是最好使用类似xlwings的东西来自动化Excel并使其完成工作。