Как сопоставить точные слова в Python? - PullRequest
0 голосов
/ 27 апреля 2020

Я новичок в python. У меня есть набор строк в нескольких текстовых файлах. Там будет более 100 файлов.

cool.add.odd.inn.txt

weather: cool.add.odd.inn

blab: name= hello.add.COPY_HI
blab: name= hello.add.ACCESS_HELLO
blab: name= hello.add.ADD_HI
blab: name= hello.add.WRITE_HI
blab: name= hello.add.WRITE
blab: name= hello.add.COPY

warm.add.minus.txt

weather: warm.add.minus

blab: name= hello.add.COPY_HI
blab: name= hello.add.ACCESS_HELLO
blab: name= hello.add.ADD_HI
blab: name= hello.add.WRITE_HI
blab: name= hello.add.WRITE
blab: name= hello.add.COPY

я создал список совпадений с шаблоном

total = ['WRITE_HI', 'COPY_HI', 'ADD_HI'] #there will more than 100 key words

Я хочу получить точное совпадение с заданным списком ввода и записать его в CSV-файл. См. Мое кодирование

state1='weather,state'

weather= os.listdir('./data/weather')
for warm in weather:
    file= open('./data/weather' + warm, 'r')
    ins=file.read()

state1+=warm.replace('.txt', '') + ','

for all_1 in total:
    if all_1 in ins:
        state1 += all_1 + '\n'
state1 += '","'

Вывод дается в формате CSV, Теперь с моим кодом я получаю частичный вывод при сравнении строк. Здесь он дает совпадение, а также с похожими словами (пример: я хочу только 'WRITE_HI' и 'COPY_HI' согласно моему списку, но он также дает 'WRITE' и 'COPY', которые в качестве одинаковых строк соответствуют, я не хочу, чтобы Мне нужен только шаблон в списке. Я слышал, что есть еще методы для сопоставления с образцом, такие как регрессионное соответствие и т. Д. c. Пожалуйста, кто-нибудь поможет мне в этом вопросе. Заранее спасибо

Output:

weather,state 
cool.add.odd.inn,'WRITE_HI'
'WRITE'
'COPY_HI'
'COPY'
'ADD_HI' 

warm.add.minus,'WRITE_HI'
'WRITE'
'COPY_HI'
'COPY'
'ADD_HI'    

Обновление : Результат найден со следующим

def word_check(ins, total):
    total=total[:]
    found=[]
    for match in re.finditer('\w+', ins):
        if words in total:
        found.append(words)
        total.remove(words)
    return found

Ответы [ 2 ]

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

На самом деле было бы проще использовать регулярные выражения для сопоставления с ними

import re
pattern1 = r"\w*\.WRITE\_HI"
pattern2 = r"\w*\.COPY\_HI"
pattern3 = r"\w*"\.ADD\_HI"
#then use re.search method to search and match the names

это решение будет соответствовать, и использование регистра if и elif может классифицировать их по разным группам, и вы можете выполнить обработку

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

Поскольку совпадения всегда находятся в конце строки, просто включите перевод строки в элементы вашего поискового запроса.

total = ['WRITE_HI\n', 'COPY_HI\n', 'ADD_HI\n']

Обратите внимание, что это будет означать изменение state1 += all_1 + '\n' до state1 += all_1, так как требуемый перевод строки уже присутствует.

Кроме того, сборка CSV-файла вручную путем объединения содержимого, запятых и т. д. c. не очень хорошая идея Используйте библиотеку, например модуль csv.

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