我有一个read.log文件,其中包含诸如...
10.2.177.170 Tue Jun 19 03:30:55 CDT 2018
10.2.177.170 Tue Jun 19 03:31:03 CDT 2018
10.2.177.170 Tue Jun 19 03:31:04 CDT 2018
10.2.177.170 Tue Jun 19 03:32:04 CDT 2018
10.2.177.170 Tue Jun 19 03:33:04 CDT 2018
我的代码将读取倒数第三行并组合字符串。因此,正常输出为:
2018:19:03:32:04
我的问题是,如果只有4行或更少的数据行,例如
10.1.177.170 Tue Jun 19 03:30:55 CDT 2018
10.1.177.170 Tue Jun 19 03:31:03 CDT 2018
10.1.177.170 Tue Jun 19 03:31:04 CDT 2018
10.1.177.170 Tue Jun 19 03:32:04 CDT 2018
我遇到错误
x1 = line.split()[0]
IndexError: list index out of range
如何进行错误检查或阻止它发生?我一直在尝试检查日志中有多少行,如果少于5行,请打印一条通知。有更好的选择吗?
def run():
f = open('read.log', 'r')
lnumber = dict()
for num,line in enumerate(f,1):
x1 = line.split()[0]
log_day = line.split()[3]
log_time = line.split()[4]
log_year = line.split()[6]
if x1 in lnumber:
lnumber[x1].append((log_year + ":" + log_day + ":" + log_time))
else:
lnumber[x1] = [(num,log_time)]
if x1 in lnumber and len(lnumber.get(x1,None)) > 2:
# if there are less than 3 lines in document, this will fail
line_time = (lnumber[x1][-3].__str__())
print(line_time)
else:
print('nothing')
f.close
run()
答案 0 :(得分:0)
f.readlines()
为您提供文件中的行列表。因此,您可以尝试读取文件中的所有行:
f = open('firewall.log', 'r')
lines = f.readlines()
如果行数少于或等于4,则退出:
if len(lines) <= 4:
f.close()
print("4 or less lines in file")
exit()
您收到的IndexError是因为您正在一行上没有任何内容的情况下调用split()
。我建议做类似if not line: continue
的事情来避免这种情况。