Поиск, если все строки в .txt - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь запустить программу для просмотра .txt файла, и если, в зависимости от содержимого

Я думал, что будет

Searhterms = [A, B]
with('output.txt') as f:

    if ('A' and 'B') in f.read():
        print('mix')
    eLif ('A') in f.read:
        if ('B') not in f.read:
            print('ONLY A')
    elif ('B') in f.read():
        if ('A') not in f.read:
            print('ONLY B') 
    else:
        if ('A' and 'B') not in f.read:
            print('NO AB)

Но если A и B присутствуют это работает, но если только один, он пропускает к другому. Чем больше я на это смотрю, тем больше путаюсь.

Ответы [ 4 ]

1 голос
/ 29 апреля 2020

Вам лучше использовать это:

Searhterms = [A, B]  # not sure why you need this

with('output.txt') as fin :  # nice name for the INPUT file, btw
    lines = fin.readlines()

for line in lines :
    if ('A' in line) and ('B' in line):
        print('mix')
    eLif 'A' in line:  # nice uppercase 'L', will puzzle the python
        #if 'B' not in line:    # don't need this
        print('ONLY A')
    elif 'B' in line:
        #if 'A' not in line:    # don't need this
        print('ONLY B') 
    else:
        #if ('A' and 'B') not in f.read:   # this condition is not required
        print('NO AB')

if len(lines) == 0 :
    print('empty file')
0 голосов
/ 29 апреля 2020

Ваш код немного глючит. Во-первых, вы должны позвонить f.read() только один раз. И ваши операторы if неверно сконструированы.

Попробуйте этот код и проанализируйте его:

with open('output.txt') as f:
    lines = f.read()

if 'A' in lines and 'B' in lines:
    print('mix')
elif 'A' in lines:
    print('ONLY A')
elif 'B' in lines:
    print('ONLY B')
else:
    print('NO AB')
0 голосов
/ 29 апреля 2020

Я согласен с @Zabir Al Nazi здесь. чтение f.read () очищает файл

использовать это

Searhterms = ['A', 'B']

with open('output.txt') as f:
    content = f.read()
    if ('A' and 'B') in content:
        print('mix')
    elif 'A' in content:
        if 'B' not in content:
            print('ONLY A')
    elif 'B' in content:
        if 'A' not in content:
            print('ONLY B')
    else:
        if ('A' and 'B') not in content:
            print('NO AB')
0 голосов
/ 29 апреля 2020

Как сказано в комментарии, f.read() читает все содержимое вашего файла за один go, поэтому последующие вызовы f.read() не возвращают никаких данных. Вам нужно хранить данные в переменной. Кроме того, вы неправильно поняли, как работает оператор and.

with open('output.txt', 'r') as f:
    data = f.read()
    if 'A' in data and 'B' in data:
        print('mix')
    elif 'A' in data:
        print('ONLY A')
    elif 'B' in data:
        print('ONLY B') 
    else:
        print('NO AB)
...