Итерация по всем строкам с несколькими условиями - PullRequest
0 голосов
/ 11 ноября 2018

Я хочу перебрать все строки сразу и проверить, находится ли строка в какой-либо из строк, если это так, затем применить функцию и выйти из цикла, если нет, то проверить вторую строку и сделать то же самое вещь. Если ни одна строка не найдена в какой-либо из строк, продолжайте с остальным ..

split= text.as_string().splitlines()
for row in split:
   if 'Thanks Friend' in row.any():
     apply_some_function()
     break
   elif 'other text' in row.str.any():
     apply_some_function()
     break
   else:
     .......

Я получаю сообщение об ошибке:


AttributeError                            Traceback (most recent call last)
      <ipython-input-179-8f0e09f62771> in <module>()
      1 for row in split:
      2 
----> 3   if 'Thanks Friend' in row.str.any():
      4     apply_some_function()
      5     break

AttributeError: 'str' object has no attribute 'str'

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Вы используете атрибуты / методы объектов, которые не существуют в python. Вот что означает AttributeError.

Один из способов найти все существующие атрибуты объекта - использовать функцию help() в консоли python. Например, введите help(str), чтобы получить все методы, которые можно использовать со строками.

Я не думаю, что есть способ перейти ко всем строкам "сразу", когда вы хотите делать разные вещи в каждой строке. Таким образом, вы должны остаться с оригинальным кодом. Вот исправленная версия:

split = text.splitlines()
for row in split:
    if 'Thanks Friend' in row:
        apply_some_function()
        break
    elif 'other text' in row:
        apply_some_function()
     break
   else:
       ...
0 голосов
/ 11 ноября 2018

Попробуйте следующее. Но имейте в виду, что текст будет разбит при возврате каретки, что может не соответствовать тому, что вы хотите сделать. Кроме того, вы хотите сделать что-то другое, если «другой текст» разделен? Если вы это сделаете, то вы должны сообщить нам.

split = text.split("\n")
if any(x for x in split if 'Thanks Friend' in x):
    apply_some_function()
elif any(x for x in split if 'other text' in x):
    apply_some_function()
else:
    pass

Вы также можете сделать:

if any(x for x in split if 'Thanks Friend' in x) or \:
any(x for x in split if 'other text' in x):
    apply_some_function()
...