【发布时间】:2015-08-10 19:02:09
【问题描述】:
首先,我对 Python 和一般编程非常陌生,所以如果这是一个显而易见的问题,请多多包涵。
我有一个未定义数量(可能超过 10 个)的日志文件与目录中的其他随机文件混合在一起,我需要将这些文件合并到一个文件中,其中的行按每行开头的时间戳排序。日志文件是 .txt,并且在同一目录中还有其他非日志 .txt 文件,因此我将让该脚本的用户输入每个日志文件作为参数。
现在,在您将此标记为重复之前,我浏览了此处的 4 页搜索结果,没有一个问题有我可以使用的答案。
到目前为止,我有以下工作的 Python 代码:
log_file_name = 'logfile.txt'
import sys
import fileinput
from Tkinter import Tk
from tkFileDialog import askopenfilenames
logfile = open(log_file_name, 'w+')
logfile.truncate()
logfile.seek(0)
# get list of file names
print "Opening File Dialog"
Tk().withdraw()
files = askopenfilenames(title='Select all logs you would like to compile.')
for index in range(len(files)):
print "Loop ", index
print "--- Debug message: Reading a file... ---"
logdata = open((files[index])).readlines()
print "--- Debug message: Finished reading. Writing a file... ---"
# turns logdata into a string and writes it to logfile
logfile.write(''.join(logdata))
logfile.write("\n")
print ""
print "Exited for loop."
logfile.close()
上述代码将您选择的所有文件的内容放入一个文本文件中,但它不会对它们进行排序。
我正在考虑使用正则表达式搜索括号内的数字,然后根据它对每一行进行排序...?
以下是一些示例日志文件内容。
[xx.xxxxxx] [Text] Text : Text: xxx
[xx.xxxxxx] [Text] Text : Text: xxx
[xx.xxxxxx] [Text] Some text.
There could be multiple lines of text here
These lines could include [brackets.] :(
[xx.xxxxxx] [Text] Text : Text: xxx
[xx.xxxxxx] 是系统启动后的时间戳,以秒为单位。
【问题讨论】:
-
日志文件的布局是什么(时间戳在哪里),生成的文件有多大。如果生成的文件可以很容易地存储在内存中,那么您可以使用简单的排序。如果没有,您必须划分记录并对第一组进行排序(例如最早的时间戳),将其写入文件,对下一组进行排序,写入等等。
-
@CurlyJoe 我编辑了我的问题以添加一些示例日志文本。
-
@CurlyJoe 将所有日志加载到内存中是完全没问题的。