使用带有excel的xlwings,这两种方法中哪一种是最快/首选?

时间:2016-09-28 21:48:27

标签: python xlwings

我刚开始学习Python并使用xlwings写入excel电子表格。我真的很喜欢编码(这是我的第一个问题),所以这可能是一个简单的问题,但任何评论都会非常感激。

我正在阅读网站的页面来源(使用硒和美味的汤)来获取有关产品的一些信息,例如价格和重量。然后我将这些值写入excel中的单元格。

我有两种方法可以做到这一点 - 第一种方法运行一个函数,然后将值写入excel,然后再转到下一个函数:

(这些是主要脚本的摘录 - 两种方式都可以正常工作)

   while rowNum < lastRow + 1:    

    urlCellRef = (rowNum, colNum)
    url = wb.sheets[0].range(urlCellRef).value

    # Parse HTML with beautiful soup
    getPageSource()            

    # Find a product price field value within HTML
    getProductPrice() 
    itemPriceRef = (rowNum, colNum + 1)
    # Write price value back to Excel sheet
    wb.sheets[0].range(itemPriceRef).value = productPrice

    getProductWeight()
    itemWeightRef = (rowNum, colNum + 2)
    wb.sheets[0].range(itemWeightRef).value = productWeight     

    getProductQuantity()
    itemQuantityRef = (rowNum, colNum + 4)
    wb.sheets[0].range(itemQuantityRef).value = productQuantity

    getProductCode()
    prodCodeRef = (rowNum, colNum + 6)
    wb.sheets[0].range(prodCodeRef).value = productCode


    rowNum = rowNum + 1

第二个运行所有函数,然后将每个存储的值一次性写入excel:

   while rowNum < lastRow + 1:    

    urlCellRef = (rowNum, colNum)
    url = wb.sheets[0].range(urlCellRef).value


    getPageSource()            
    getProductPrice() 
    getProductWeight()
    getProductQuantity()
    getProductCode()


    itemPriceRef = (rowNum, colNum + 1)
    wb.sheets[0].range(itemPriceRef).value = productPrice  

    itemWeightRef = (rowNum, colNum + 2)
    wb.sheets[0].range(itemWeightRef).value = productWeight

    itemQuantityRef = (rowNum, colNum + 4)
    wb.sheets[0].range(itemQuantityRef).value = productQuantity

    prodCodeRef = (rowNum, colNum + 6)
    wb.sheets[0].range(prodCodeRef).value = productCode


    rowNum = rowNum + 1 

我在想,这是做这个的首选方法吗?我没有注意到速度的差异,但我的笔记本电脑很慢,所以如果一种方法被认为是最佳实践,那么我宁愿选择它,因为我将增加将要使用的网址数量。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

Excel调用的开销至高无上。使用XLWings时,请尽快写入电子表格。

我发现使用Range对象重写整个工作表(或要更改的工作表区域)比写单个单元格,行或列更快。如果我没有进行任何繁重的数据操作,我只使用嵌套列表 - 将子列表视为列或行(转换选项是否用于此处)是否更好取决于您如何处理数据。如果您正在处理更大的数据集或进行更多的密集工作,您可能需要使用NumPy数组或Panda。