2016-09-28 10 views
1

私はちょうどPythonを学び始めており、xlwingsを使ってExcelスプレッドシートに書き出しています。私は本当にコーディングに新しい(これは私の最初の質問です)ので、これはちょっとした質問かもしれませんが、コメントは本当に感謝しています。xlwingsをexcelで使用すると、これらの2つのアプローチのうちどれが最も早く優先されますか?

私はウェブサイトのページソース(セレンと美しいスープを使用しています)を読んで、価格や重量などの製品に関するいくつかの情報を入手しています。私はこれらの値をExcelのセルに書きます。

は、私がこれを行うための2つの方法があり - 最初は、関数を実行し、次の機能に移動する前に秀でるために値を書き込みます(これらは、メインスクリプトの抜粋です

- 両方の方法は、正常に動作します)

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つのアプローチがベストプラクティスと見なされたら、使用するURLの数を増やすことになります。

ご協力いただきありがとうございます。

答えて

1

Excelコールのオーバーヘッドは最高です。 XLWingsを使うときは、できるだけ頻繁にスプレッドシートに書き込んでください。

Rangeオブジェクトを使用してシート全体(または変更するシートの領域)を書き換えて、個々のセル、行、または列を書き込むよりも早く飛躍することが判明しました。重いデータ操作をしていない場合は、ネストされたリストを使用します。サブリストを列または行として扱う方が良いかどうか(tranposeオプションはこれに使用されます)は、データ。大規模なデータセットを扱う場合や、より集中的な作業をする場合は、NumPy配列やPandaを使用することができます。

+0

こんにちは、アドバイスありがとうございます!私は今リストのことを学んでいるので、最終的な書き込みには、それぞれのセルが順番に書かれているのではなく、範囲に書き込まれたリストを使用するように、すべてを並べ替えます。 NumPyとPandaについては、私が言及したようにいくつかの宿題をする必要がありますが、それらはまだ使われていません。もう一度ありがとう、リチャード。 – QBG

関連する問題