在文件行中找到匹配项,然后继续下一个文件

时间:2018-06-23 11:38:11

标签: python python-2.7

我是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”。有人可以帮助/建议吗?

1 个答案:

答案 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) 编码,而不是二进制访问,因为这样会使文件交互更容易。