Уведомления

Группа в Telegram: @pythonsu

#1 Июль 10, 2022 14:39:27

gedat
Зарегистрирован: 2022-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Перебор строк в цикле for

     try:
        out2 = subprocess.check_output("/root/script1", universal_newlines=True)
        out2 = out2.strip()
        for value in out2:
            if value != "Текст1" or "Текст2":
                if out2 != 'Текст3 and out2 is not None:
                    Вызов функции
                    )
out2 содержит текст вида
Текст6
Текст3
Текст2
Текст1
Тест4 и тд

Мне нужно что бы в out2 перебрались все строчки, и если в этом списке нет “Текст1” , то функция выполнялась.
Но проблема в моей коде в том что, эта функция выполняется несколько раз, так как он пробегается по каждой строчке, и вызывает функцию так как не находит “Текст1” в строчке. А мне нужно что бы сначала он пробежался по всем строкам, а потом только если такой строчки не было , то вызывать функцию. Как это можно сделать?)



Не изучал язык python, просто пишу для работы мини скрипты
Мой основной язык C#

Отредактировано gedat (Июль 10, 2022 14:40:06)

Офлайн

#2 Июль 10, 2022 17:34:45

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Перебор строк в цикле for

 if "Текст1" not in out2:
    pass



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Июль 10, 2022 18:01:01

gedat
Зарегистрирован: 2022-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Перебор строк в цикле for

ZerG
Получается
  if "Текст1" not in out2:
    pass
и
 if out2  != "Текст1":
   pass

это две разные вещи?




Не изучал язык python, просто пишу для работы мини скрипты
Мой основной язык C#

Офлайн

#4 Июль 10, 2022 19:19:42

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Перебор строк в цикле for

- оператор==проверяет равенство значений двух объектов
- оператор is проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти

https://realpython.com/python-is-identity-vs-equality/



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Июль 11, 2022 10:37:05

gedat
Зарегистрирован: 2022-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Перебор строк в цикле for

ZerG
- оператор==проверяет равенство значений двух объектов- оператор is проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памятиhttps://realpython.com/python-is-identity-vs-equality/
Спасибо. Но почему-то это не сработало

 if "Текст Текст Текст: Текст" or "Текст Текст Текст: Текст" not in out2:



Не изучал язык python, просто пишу для работы мини скрипты
Мой основной язык C#

Офлайн

#6 Июль 11, 2022 11:33:53

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Перебор строк в цикле for

Давайте наверное реальный вывод данных и ключи по которым проверяете
а то спрашиваете одно а пишете совершенно другое
кроме того уж если пишете на питоне то прочитайте пару страничек доки

 out2 = ["Текст1", "Текст2", "Текст3", "Текст4", "Текст1"]
key1 = "Текст1"
key2 = "Текст9"
if key1 not in out2 or key2 not in out2:
    print("Done")



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Июль 11, 2022 11:44:52

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1395
Репутация: +  124  -
Профиль   Отправить e-mail  

Перебор строк в цикле for

  
print((bool('text'))) # True
print(bool('')) # False
print(bool(None)) # False
print(bool(0)) # False
print(bool(12))  # True
print(bool([])) # False
print(bool([1, 2, 3, 4])) # True
print('=============================')
text = "Сиреневенький револьверчик достали изподвыподверта"
print("револьверчик" in text) # True
print('мотоцикл' in text) # False
print('мотоцикл' not in text) # True
print(True or True) # True
print(True or False) # True Ваш случай
print(False or False) # False

Офлайн

#8 Июль 11, 2022 11:55:53

gedat
Зарегистрирован: 2022-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Перебор строк в цикле for

ZerG
Давайте наверное реальный вывод данных и ключи по которым проверяетеа то спрашиваете одно а пишете совершенно другоекроме того уж если пишете на питоне то прочитайте пару страничек доки
Вот реальный вывод

         out2 = subprocess.check_output("/root/script1", universal_newlines=True)
        out2 = out2.strip()
        if out2 != 'Нет изменений' and out2 is not None:
            if "Проверку прошёл: Бот" or "Проверку не прошёл: Бот" not in out2:
                vk.messages.send(
                    key=(''), 
                    server=(''),
                    ts=(''),
                    random_id=get_random_id(),
                    message=out2,
                    chat_id=('1'),
                )

Содержимое /root/script1
Проверку прошёл: Андрей
Проверку прошёл: Иван
Проверку прошёл: Дмитрий
Проверку прошёл: Сергей
Проверку прошёл: Елена
Проверку не прошёл: Бот

Нужно что бы когда есть “Проверку не прошёл: Бот” или “Проверку прошёл: Бот”, vk.messages.send не выполнялся

Вот это кстати интересно
 print(True or False) # True Ваш случай

Думаю то что мне нужно
 if key1 not in out2 or key2 not in out2:
Хотя тут всё равно получается true на false = true

Должно
 if key1 not in out2 and key2 not in out2:
сработать



Не изучал язык python, просто пишу для работы мини скрипты
Мой основной язык C#

Отредактировано gedat (Июль 11, 2022 13:21:36)

Офлайн

#9 Июль 11, 2022 14:24:24

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Перебор строк в цикле for

Мда.
Начнем пожалуй с того что у вас на выходе строка а методы вы применяете для списков.
В любом случае хромает логика проверки - так как в любом случае если одно из условий верно
нам нужно пропустить действие.

 import os
import subprocess
fpath = os.path.join(os.getcwd(), "my.txt")
out2 = subprocess.check_output(["cat", fpath], universal_newlines=True)
out2 = out2.strip()
print(f"type:{type(out2)}")
if out2 != "Нет изменений" and out2 is not None:
    # Method tith OR
    if out2.find("Проверку прошёл: Бот") > 0 or out2.find("Проверку не прошёл: Бот") > 0:
        print("Pass by OR")
    else:
        print("Do something by OR")
    # Method with AND
    if out2.find("Проверку прошёл: Бот") < 0 and out2.find("Проверку не прошёл: Бот") < 0:
        print("Do something by AND")
    else:
        print("Pass by AND")



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#10 Июль 11, 2022 20:52:54

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1395
Репутация: +  124  -
Профиль   Отправить e-mail  

Перебор строк в цикле for

 if "Проверку прошёл: Бот"  or "Проверку не прошёл: Бот" not in out2:
не пустая строка всегда дает True
проверять нужно каждую строку
 if ("Проверку прошёл: Бот" not in out2) or ("Проверку не прошёл: Бот" not in out2):

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version