Excelドキュメントを読み取り、最初の行に「UPDATED」が含まれているかどうかを確認するスクリプトを作成しました。その場合、行全体を同じタブ名の別のExcelドキュメントに書き込みます。
私のExcelドキュメントは23枚で、各シートに1000行ありますが、これを完了するには15分以上かかります。これをスピードアップする方法はありますか?
マルチスレッドまたはマルチプロセッシングについて考えていましたが、どちらが優れているかわかりません。
更新:私のプログラムの実行に15分かかったという事実は、読み取り専用モードが原因でした。プログラムを削除すると、プログラムの実行に2秒しかかかりませんでした。
import openpyxl
import os
from datetime import datetime
titles = ["Column1", "Column2", "Column3", "Column4", "Column5","Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16"]
def main():
oldFilePath= os.getcwd() + "\oldFile.xlsx"
newFilePath= os.getcwd() + "\newFile.xlsx"
wb = openpyxl.load_workbook(filename=oldFilePath, read_only=True)
wb2 = openpyxl.Workbook()
sheets = wb.get_sheet_names()
sheets2 = wb2.get_sheet_names()
#removes all sheets in newFile.xlsx
for sheet in sheets2:
temp = wb2.get_sheet_by_name(sheet)
wb2.remove_sheet(temp)
for tab in sheets:
print("Sheet: " + str(tab))
rowCounter = 2
sheet = wb[tab]
for row in range(sheet.max_row):
if sheet.cell(row=row + 1, column=1).value == "": #if cell is empty stop reading
break
elif sheet.cell(row=row + 1, column=1).value == "UPDATED":
if tab not in sheets2:
sheet2 = wb2.create_sheet(title=tab)
sheet2.append(titles)
for x in range(1, 17):
sheet2.cell(row=rowCounter, column=x).value = sheet.cell(row=row + 1, column=x).value
rowCounter += 1
sheets2 = wb2.get_sheet_names()
wb2.save(filename=newFilePath)
if __name__ == "__main__":
startTime = datetime.now()
main()
print("Script finished in: " + str(datetime.now() - startTime))
このような小さなブックの場合、読み取り専用モードを使用する必要はなく、無害に使用することで、自分で問題を引き起こします。を呼び出すたびにws.cell()
、openpyxlはワークシートを再度解析します。
したがって、読み取り専用モードの使用を停止するかws.iter_rows()
、前の質問でアドバイスしたとおりに使用します。
一般に、何かが遅くなっていると思う場合は、何かを試して最高のものを期待するのではなく、常にプロファイルを作成する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加