2016-09-28 127 views
1

我刚刚开始学习Python,并使用xlwings写入Excel电子表格。我对编码真的很陌生(这是我的第一个问题),所以这可能是一个简单的问题,但任何意见都会非常感谢。在excel中使用xlwings,这两种方法哪一种最快/首选?

我读了一个网站(使用硒和美丽的汤),以获得有关产品的几件,如价格和重量的页面的源代码。然后,我将这些值写入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 

第二运行所有的功能,然后将写入每个所存储的值的一气呵成练成:

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 

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

非常感谢您的帮助!

回答

1

Excel调用的开销至高无上。使用XLWings时,尽可能不要频繁地写入电子表格。

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

+0

嗨 - 感谢您的建议!我现在只是在学习列表,所以我将重新排列所有内容,以便最后写入excel时使用单个列表写入一个范围,而不是像现在这样依次写入每个单元格。我需要做一些关于NumPy和Panda的作业,因为我已经看到他们提到过,但还没有使用它们。再次感谢理查德。 – QBG

相关问题