Найти - Пользователи
Полная версия: Перебор строк в цикле for
Начало » Python для новичков » Перебор строк в цикле for
1 2
gedat
     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” в строчке. А мне нужно что бы сначала он пробежался по всем строкам, а потом только если такой строчки не было , то вызывать функцию. Как это можно сделать?)
ZerG
 if "Текст1" not in out2:
    pass
gedat
ZerG
Получается
  if "Текст1" not in out2:
    pass
и
 if out2  != "Текст1":
   pass

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


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

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

 if "Текст Текст Текст: Текст" or "Текст Текст Текст: Текст" not in out2:
ZerG
Давайте наверное реальный вывод данных и ключи по которым проверяете
а то спрашиваете одно а пишете совершенно другое
кроме того уж если пишете на питоне то прочитайте пару страничек доки
 out2 = ["Текст1", "Текст2", "Текст3", "Текст4", "Текст1"]
key1 = "Текст1"
key2 = "Текст9"
if key1 not in out2 or key2 not in out2:
    print("Done")
xam1816
  
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
gedat
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:
сработать
ZerG
Мда.
Начнем пожалуй с того что у вас на выходе строка а методы вы применяете для списков.
В любом случае хромает логика проверки - так как в любом случае если одно из условий верно
нам нужно пропустить действие.

 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")
xam1816
 if "Проверку прошёл: Бот"  or "Проверку не прошёл: Бот" not in out2:
не пустая строка всегда дает True
проверять нужно каждую строку
 if ("Проверку прошёл: Бот" not in out2) or ("Проверку не прошёл: Бот" not in out2):
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB