Я новичок в python, и я пытаюсь написать скрипт, чтобы перебирать все.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, start, etimes, cmd | egrep -v [\ w <|> nobody 22972 21597 03:06:12 8767 (dnsserver)
srv29393 | 06/23/18 | 05: 32: 02 | 1529746322 | ps -eo пользователь, pid, ppid, start, etimes, cmd | egrep -v [\ w <|> nobody 22973 21597 03:06:12 8767 (dnsserver)
srv29393 | 06/23/18 | 05: 32: 02 | ps -eo пользователь, pid, ppid, start, etimes, cmd | egrep -v [\ w <|> nobody 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
-p <|> +2.2.2.11 12.12.12.11 3 u 1049 1024 377 824.784 0.707 0.121
Он пропустил "id" для тех, кто выпустил NTP. Может ли кто-нибудь помочь или посоветовать?
У вас небольшая проблема. Вы пытаетесь напечатать id
за пределами цикла for
где id
недоступен. Таким образом, он должен быть помещен внутри цикла.
Кроме того, по этой причине нет причин, по которым вы должны иметь переменную iFoundTheLine
поскольку она не нужна.
EDIT: 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)
Поскольку текстовый файл содержит специальные символы, я рекомендую использовать UTF-8
с файлом, а не обращаться к нему в двоичном формате, поскольку это облегчает взаимодействие с файлом.