Как я могу найти строку в соответствии с двумя последующими словами в текстовом файле

#python #search #text #word

#python #Поиск #текст #word

Вопрос:

Я очень новичок в Python, поэтому, пожалуйста, извините за невежественные вопросы или чрезмерно сложный код. 🙂 Я очень благодарен за любую помощь.

Код, который у меня есть до сих пор, состоит в том, чтобы открыть для чтения / несколько текстовых файлов, выполнить поиск строк по ключевым словам, а затем записать новые текстовые файлы, оставив строки с найденными ключевыми словами. Это делается для очистки файлов (газетных статей) от информации, которую я не хочу иметь, прежде чем анализировать оставшийся текст. Проблема в том, что я могу искать только отдельные слова. Однако иногда я хотел бы искать определенную комбинацию слов, то есть не просто «Rechte», а «Alle Rechte vorbehalten». Если я сохраню это в своем delword-list, это не сработает (я думаю, потому что part в line.split проверяет только отдельные слова.)

Любая помощь очень ценится!

     import os
    
    delword = ['Quelle:', 'Ressort:', 'Ausgabe:', 'Dokumentnummer:', 'Rechte', 'Alle Rechte vorbehalten']
    
    path = r'C:files'
    pathnew = r'C:filesnew'
    
    dir = []
    
    for f in os.listdir(path):
        if f.endswith(".txt"):
            #print(os.path.join(path, f))
            print(f)
            if f not in dir:
                dir.append(f)
             
    for f in dir:
        
        fpath = os.path.join(path, f)
        print (fpath)
        fopen = open(fpath, encoding="utf-8", errors='ignore')
        printline = True
        #print(fopen.read())
        fnew = 'clean'   f
        fpathnew = os.path.join(pathnew, fnew)
    
        with open(fpath, encoding="utf-8", errors='ignore') as input:
            with open(fpathnew, "w", errors='ignore') as output: 
                for line in input:
                    printline = True
                    for part in line.split():
                        for i in range(len(delword)):
                                if delword [i] in part:
                                    #line = " ".join((line).split())
                                    printline = False
                                    #print('Found: ', line)
                    if printline == False:
                        output.write('n')
                    if printline == True:
                        output.write(line)
                    
        
        input.close()
        output.close()
        fopen.close()
  

Ответ №1:

В данном конкретном случае — вам не нужно разделять строку. Вы можете выполнить аналогичные проверки с помощью

 for line in input:
    for word in delword:
        if word in line: ...
  

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