几年前我创建了一个 Python2 网络抓取工具,并希望重新使用该语言。作为一个狂热的 Splunk 用户,我想写一些可以读取 Splunkd.log 的东西(比如 grep 命令)。然后仅将 ERROR 和 WARN 消息拉到新文件中。后来我想进一步过滤到我知道我想知道的问题并将它们复制到文件的顶部。现在我已经设置并将所有 ERROR 和 WARN 行打印到它创建的名为 SplunkdFilterd.txt 的新文件中。我认为复制这些行并将其置于顶部的正确方法是 1. 关闭文件 2. 重新以追加模式打开 3. 寻找顶部 4. 写下一行。
我在重新打开时遇到了问题,或者我完全错误地解决了这个问题。任何提示或想法?谢谢你的时间!
这是 Python 发回的错误:
"_True"
代码我在第 19 行添加了一个注释以更容易跳转:
Traceback (most recent call last):
File "/home/kurt/python/SplunkdError&Warn.py", line 19, in <module>
for line2 in Append1:
io.UnsupportedOperation: not readable
答案 0 :(得分:0)
必须在内存中对行进行排序,以便将某些错误排在最前面。下面将在内存中存储行,必要时插入。
鉴于 splunkd.log:
some line1
some line2
ERROR unrelated
ERROR Connection
INFO line1
INFO line2
some line3
some line4
这个:
import sys
lines = []
with open('splunkd.log') as InFile:
for line in InFile:
if 'ERROR' in line:
if any(s in line for s in ('Connect','Cert','AuthenticationManagerLDAP')):
lines.insert(0,line) # important errors to front
else:
lines.append(line) # other errors to end
elif 'INFO' not in line:
lines.append(line) # non-INFO lines to end as well
with open('SplunkdFilterd.txt','w') as OutFile:
OutFile.writelines(lines)
生成 SplunkdFilterd.txt:
ERROR Connection
some line1
some line2
ERROR unrelated
some line3
some line4