在Python中将日志文件的一部分读取到数组中

时间:2015-06-29 15:10:41

标签: python arrays

我之前有一些Python的经验,但它已经有一段时间了,所以我有点生疏了。我试图弄清楚如何将日志文件的某些部分提取到数组中。

以下是日志文件的示例(3行,每行14个数字条目):

       -3.440208377846361E-002 -3.640975490509869E-002   3.77129385321508       7.937315452622962E+040  1.067031475475027E-015  6.626932578094536E+039  2.637269012342617E+034  6.626906205404414E+039  2.008451522885638E+025   2426438437.29153        13424548.8207020       1013967360829.11        364214556916.216        1100.16964475087
       -3.442345778664616E-002 -3.643241462492964E-002   3.77129983957511       1.588956060345964E+041  2.136069984437443E-015  6.626924938142817E+039  1.056889619379146E+035  6.626819249180878E+039  8.048900417930891E+025   2426441623.69160        13424487.5716696       2029898474163.94        729111075239.864        1100.17676257806
       -3.447047146128363E-002 -3.644149740258100E-002   3.77129262754527       2.781765670453510E+041  3.739591232686748E-015  6.626924955173501E+039  3.239268437345529E+035  6.626601028329767E+039  2.466913157350972E+026   2426441630.05298        13424487.4034776       3553717920905.67        1276445706704.12        1100.17678094667

继续进行多达数百行(取决于具体情况)。目前我设置为每个数据运行保存601行,但这个数字似乎不可信,因为我注意到行数从大约595-605变化。我认为我必须首先确定用于此代码的行数。

我使用以下代码测试读取日志文件(类似于Iterating on a file using Python的答案):

with open("output.log", 'r') as f:
     for line in f:
          print line

并且工作正常(在上面的块中缩进可能是错误的)。

我的问题是如何从每行中提取第3个数字并将其放入数组中?如果日志文件以字母和数字命名(例如,对于第3个元素,它可能是" M_3.7729385321508",因为那时我可以搜索" M _&#34,这将更直接) ;在每一行中,将下划线后面的15个字符提取到数组中;请参阅http://www.wellho.net/solutions/python-log-file-analysis-short-python-example.html),但情况并非如此。

当我读取日志文件时,它被格式化为包含字符串的列表。每个字符串对应于日志文件的一行。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

如果它总是成为每一行的第三个数字,使用str.split()就可以很容易地实现这一目标。

>>> for line in s.splitlines():
        print line.split()[2]


3.77129385321508
3.77129983957511
3.77129262754527

答案 1 :(得分:0)

我最终使用的代码是(下面的缩进可能不正确):

with open("output.log", 'r') as file:
    list_of_strings = file.readlines()

length_of_list = len(list_of_strings)
array = []

for i in range(length_of_list):
    s = list_of_strings[i]
    for line in s.splitlines():
        wanted_element = line.split()[2]
        wanted_element_numerical_value = float(wanted_element)
        array.append(wanted_element_numerical_value)

file.close()

这就是我希望实现的目标。