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

发布于 2025-01-19 01:37:45 字数 1793 浏览 3 评论 0原文

我在CSV文件中有Syslog数据,并且我正在尝试按时间对这些数据进行排序。

实际上,我可以用以下代码对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,以便如果数据有太多行,则需要太多时间。

可以更快地使过程吗?

I have syslog data in csv file and I am trying to sort this data by time.

Actually I am able to sort my csv data with the following code.

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.")

See the data before and after my code is run.

Pre

Post

However, the problem is that my code takes too much time to sort the excel if the excel has too many data such as more than 200k lines.

I think that the problem which makes the code slower is that my code appends each line as list and sort it by time. Then it creates new excel by using the list so that it takes too much time if the data has too many lines.

Is it possible to make the process faster?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

予囚 2025-01-26 01:37:45

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

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

My suggestions in my comments would be expressed in code as:

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")

So eliminate this:

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()

As this:

for row in csvreader:
        rows.append(row[0])

rows.sort()

does the same thing, if I am following correctly. In the process you eliminate one for loop and do the .sort() once instead of for each iteration of the loop.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文