Как сделать так, чтобы сценарий python распечатал точное совпадение в текстовом файле? - PullRequest
1 голос
/ 06 августа 2020

У меня есть сценарий python, который принимает вводимые пользователем данные, затем ищет текстовый файл и печатает строку. Однако, когда пользователь вводит число, отличное от других чисел, он распечатывает все, что связано.

Например, если пользователь вводит STT1, но есть другая строка, которая называется STT12, 13, 14 и т.д. c. Сценарий распечатывает каждую строку, поскольку в ней стоит цифра 1. Как сделать так, чтобы сценарий выводил только точное совпадение?

Пример вывода


Please enter your area: TTT17
Please enter STT name: STT1



STT Location:

TTT17 | STT1 | Floor 1 | Row 2 | Section 2




STT Location:

TTT17 | STT13 | Floor 1 | Row 22 | Section 2




STT Location:

TTT17 | STT14 | Floor 1 | Row 22 | Section 2




STT Location:

TTT17 | STT17 | Floor 1 | Row 42 | Section 2




STT Location:

TTT17 | STT18 | Floor 1 | Row 42 | Section 2

Пример кода


def find_stt():
  with open('{}'.format(db_file), 'r') as f:
    find_flag = False
    for line in f.readlines():
      if line.startswith(area) and name in line:
        print("\n" + "\n" + "\n" + color.BOLD + "STT Location:" + color.END +
              "\n" + "\n" + color.BOLD + ' '.join(line.split()) + color.END + "\n")
        find_flag = True
    if not find_flag:
      failed_search()

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Вы проверяете с помощью name in line. Это условие будет выполняться для всех подстрок, содержащих name. Решением для этого будет использование регулярных выражений.

if line.startswith(area) and re.search(r'\b'+ name + r'\b', line) 
0 голосов
/ 07 августа 2020

Я смог понять это. Возможно, это не лучший способ, но он работает. В основном я взял свою входную переменную

name = input("Please enter STT name: ").upper()

и создал новую переменную, добавив пробел в конце

name_search = name + " "

def find_stt():
  with open("{}".format(db_file), "r") as f:
    find_flag = False
    for line in f.readlines():
      if line.startswith(area) and name_search in line:
        print("\n" + "\n" + "\n" + color.BOLD + "SPP Location:" + color.END +
              "\n" + "\n" + color.BOLD + " ".join(line.split()) + color.END +
              "\n")
        find_flag = True
    if not find_flag:
      failed_search()

Это решило мою проблему.

...