Как найти какое-то слово в текстовом файле - PullRequest
0 голосов
/ 24 мая 2019

У меня есть текст файла, я хочу отфильтровать слово в тексте с условием:

1) одинаковая длина и начинается с одинаковой буквы

2) найти слова, содержащие не менее 2 правильно расположенных букв

Например:

слово = бубал

текст

byres
brits
blurb
bulks
bible
debug
debut

и хотите вывести: ['bulks', 'bible'] с bulks имеют правильно расположенные 'b' и 'u', а bible имеют 2 b, правильно расположенные с bubal Мой идеал, чтобы найти слово с начала букв и так найти слово той же длины, а затем найти слово правильно 2-е условие Но я пишу код найти слово, начинающееся с использования re, и оно не работает хорошо

import re
with open('words.txt','r') as file:
    liste = file.read()
    word = re.findall('[b]\w+',liste)
    print(word)

Мой код возврата ['byres','brits','bulks','but','bug'] Как это исправить и найти условие потоков слов

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Отредактировано на основе вашего комментария.

Это может быть то, что вам нужно:

#!/usr/bin/env python

def find_best_letter_matches(lines, target):
    m = []
    m_count = 0

    for line in lines:
        count = sum(map(lambda x: x[0] == x[1], zip(line, target)))
        if count > m_count:
            m = []
            m_count = count
        if count == m_count:
            m.append(line)

    return m

def find_n_letter_matches(lines, target, n):
    m = []

    for line in lines:
        count = sum(map(lambda x: x[0] == x[1], zip(line, target)))
        if count >= n:
            m.append(line)

    return m

if __name__ == '__main__':
    with open('text.txt', 'r') as f:
        lines = f.read().split('\n')
        best_matches = find_best_letter_matches(lines, 'bubal')
        n_matches = find_n_letter_matches(lines, 'bubal', 2)
        print('Best letter matches', best_matches)
        print('At least 2 letters match', n_matches)

Функции сравнивают каждую строку с целью, буква забуква и подсчитывает количество совпадений.Затем первый возвращает список строк с наибольшим соответствием, а второй возвращает все, которые совпадают с n или более буквами.

Вывод с вашим примером текста (с добавленным бубалом):

Best letter matches ['bubal']
At least 2 letters match ['bulks', 'bible', 'bubal']
0 голосов
/ 24 мая 2019

Попробуйте это

wordToSearch = "bubal"
singlesChar = list(wordToSearch)

finalArray = []
with open('words.txt','r') as file:
    liste = file.readlines()
    for each in liste:
        each = each.rstrip()
        fn = list(each)
        flag = 0
        for i in range(0,len(singlesChar)):
            if(fn[i] == singlesChar[i]):
                flag+=1
        if(flag >= 2): finalArray.append(each)



print(finalArray)                
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...