我是python的新手,我尝试编写一个脚本来循环遍历/ home目录中的所有.txt文件,并迭代每个.txt文件中的行,看看是否可以找到匹配项(是否匹配)确实,它应该移至下一个文件。如果找不到整个文件中的匹配项,请报告它。
我拥有的代码:
strname = "ntpq -p"
for file in glob.glob("/home/xxx/*.txt"):
with open(file, 'rb') as f:
iFoundTheLine = 0
for line in f:
line = line.rstrip()
id = line.split(b"|")[0]
if strname in line:
iFoundTheLine = 1
print ("%s is ok" % id)
break
if iFoundTheLine == 0:
print ("Problem with NTP%s" % id)
我得到的结果:
srv29393还可以
NTP问题
srv29494还可以
NTP问题
srv29399还可以
srv29493还可以
我正在寻找的预期结果:
srv29393还可以
NTP srv1234问题
srv29494还可以
NTP srv2345的问题
srv29399还可以
srv29493还可以
示例行:
srv29393 | 06/23/18 | 05:32:02 | ps -eo用户,pid,ppid,开始,etimes,cmd | egrep -v [\ w <|>没人22972 21597 03:06:12 8767(dnsserver)
srv29393 | 06/23/18 | 05:32:02 | 1529746322 | ps -eo用户,pid,ppid,开始,etimes,cmd | egrep -v [\ w <|>没人22973 21597 03:06:12 8767(dnsserver)
srv29393 | 06/23/18 | 05:32:02 | ps -eo用户,pid,ppid,开始,etimes,cmd | egrep -v [\ w <|>没人22974 21597 03:06:12 8767(dnsserver)
srv29393 | 06/23/18 | 05:32:02 | 1529746322 | / usr / sbin / ntpq -p <|> * 1.1.1.11 11.11.11.11 3 u 1055 1024 377 719.042 -0.625 0.016
srv29393 | 06/23/18 | 05:32:02 | 1529746322 | / usr / sbin / ntpq -p <|> +2.2.2.11 12.12.12.11 3 u 1049 1024 377 824.784 0.707 0.121
对于那些有NTP问题的人员,它会丢失“ id”。有人可以帮助/建议吗?
答案 0 :(得分:1)
您有一个小问题。您正在尝试在<script src="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.js"></script>
<link href="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css" rel="stylesheet"/>
<div class="mdc-text-field">
<input type="text" id="my-text-field" class="mdc-text-field__input">
<label class="mdc-floating-label" for="my-text-field">Hint text</label>
<div class="mdc-line-ripple"></div>
</div>
<button class="foo-button mdc-button">Button</button>
无法访问的id
循环外打印for
。因此,应将其放置在循环中。
此外,由于这个原因,没有必要使用id
变量,因为它是不必要的。
编辑:iFoundTheLine
应该为for line in f
对代码进行一些重构:
for line in f.readlines()
由于文本文件包含特殊字符,因此我建议对文件使用import glob
strname = "ntpq -p"
for File in glob.glob("/home/xxx/*.txt"):
with open(File, 'r', encoding='utf-8') as f:
for line in f.readlines():
line = line.rstrip()
id = line.split("<|>")[0]
if strname in line:
print ("%s is ok" % id)
break
else:
# Since, `id` is accessible inside the loop
print ("Problem with NTP%s" % id)
编码,而不是二进制访问,因为这样会使文件交互更容易。