如何按时间排序csv中的系统日志数据

How to order syslog data in csv by time

我在 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,这样如果数据有太多行就会花费太多时间。

是否可以加快这个过程?

我在评论中的建议将用代码表示为:

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() 而不是每次循环迭代。