我之前有一些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),但情况并非如此。
当我读取日志文件时,它被格式化为包含字符串的列表。每个字符串对应于日志文件的一行。
非常感谢任何帮助!
答案 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()
这就是我希望实现的目标。