我在 csv 檔案中有系統日志資料,我正在嘗試按時間對這些資料進行排序。
實際上,我可以使用以下代碼對我的 csv 資料進行排序。
import csv
import sys, datetime, time
import re
from openpyxl import load_workbook
import openpyxl
import time
def XLSExport(Rows, SheetName, FileName):
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = SheetName
# ws = wb.create_sheet(SheetName)
for x in Rows:
ws.append(x)
wb.save(FileName)
ExcelExport = [["timestamp","source", "message"]]
rows = []
with open("All-Messages-search-result2.csv", 'r') as file:
csvreader = csv.reader(file)
header = next(csvreader)
for row in csvreader:
rows.append(row)
#print(header)
#print(rows)
excel_list = []
for row in rows:
#print(row[0])
row2 = row[0].split(";")
#print(row2[0])
#print(row2)
excel_list.append(f"{row2[0]};{row2[1]};{row2[2]}")
excel_list.sort()
# print(excel_list)
for sorted_ in excel_list:
sorted2_ = sorted_.split(";")
ExcelExport.append([sorted2_[0],sorted2_[1],sorted2_[2]])
#print(sorted2_)
XLSExport(ExcelExport, "Messages-result2.xlsx", "Messages-result2.xlsx")
print("'Messages-result2.xlsx' file has been created. You may find sorted syslog files. Thanks for using this program.")
查看我的代碼運行前后的資料。


但是,問題是如果 excel 包含太多資料(例如超過 200k 行),我的代碼需要花費太多時間來對 excel 進行排序。
我認為使代碼變慢的問題是我的代碼將每一行附加為串列并按時間排序。然后它通過使用串列創建新的 excel,如果資料有太多行,它會花費太多時間。
是否有可能使該程序更快?
uj5u.com熱心網友回復:
我在評論中的建議將在代碼中表達為:
def XLSExport(Rows, SheetName, FileName):
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = SheetName
for x in Rows:
ws.append(x)
wb.save(FileName)
ExcelExport = [["timestamp","source", "message"]]
rows = []
with open("All-Messages-search-result2.csv", 'r') as file:
csvreader = csv.reader(file)
header = next(csvreader)
for row in csvreader:
rows.append(row[0])
rows.sort()
for sorted_ in rows:
sorted2_ = sorted_.split(";")
ExcelExport.append([sorted2_[0],sorted2_[1],sorted2_[2]])
#print(sorted2_)
XLSExport(ExcelExport, "Messages-result2.xlsx", "Messages-result2.xlsx")
所以消除這個:
for row in rows:
#print(row[0])
row2 = row[0].split(";")
#print(row2[0])
#print(row2)
excel_list.append(f"{row2[0]};{row2[1]};{row2[2]}")
excel_list.sort()
像這樣:
for row in csvreader:
rows.append(row[0])
rows.sort()
如果我按照正確的方式做同樣的事情。在此程序中,您消除了一個for回圈并執行.sort()一次而不是回圈的每次迭代。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/455910.html
上一篇:如何從某一列中減去選定的列?
下一篇:如何洗掉csv列中的重復元素
