我刚开始学习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
我在想,这是做这个的首选方法吗?我没有注意到速度的差异,但我的笔记本电脑很慢,所以如果一种方法被认为是最佳实践,那么我宁愿选择它,因为我将增加将要使用的网址数量。
非常感谢你的帮助!
答案 0 :(得分:1)
Excel调用的开销至高无上。使用XLWings时,请尽快写入电子表格。
我发现使用Range对象重写整个工作表(或要更改的工作表区域)比写单个单元格,行或列更快。如果我没有进行任何繁重的数据操作,我只使用嵌套列表 - 将子列表视为列或行(转换选项是否用于此处)是否更好取决于您如何处理数据。如果您正在处理更大的数据集或进行更多的密集工作,您可能需要使用NumPy数组或Panda。