2016-06-18 3 views
0

Снова извиниться за здесь noob: Пробуйте ниже код для поиска нескольких строк, считанных с ключевых слов и поиска в f и печати строки. Он работает, если у меня есть только одно ключевое слово, но нет, если у меня есть больше одного.Искать несколько строк (из файла) в файле и распечатать строку

keywords = input("Please Enter keywords path as c:/example/ \n :") 
keys = open((keywords), "r").readline() 
with open("c:/saad/saad.txt") as f: 
    for line in f: 
     if (keys) in line: 
      print(line) 
+1

вы могли бы обеспечить ввод и ожидаемым вывод? –

+0

Каков формат этого файла ключевого слова? Букет слов в одной строке, разделенных пробелами? – tdelaney

+0

ключевые слова («AA», «ВВ»): файл содержит строки, как (аа хорошо, бб очень хорошо, куб.см не хорошо): ожидается выход как: аа хороший бб очень хорошо – Saadi381

ответ

2

Одна из проблем ищут ключевые слова определить, что вы имеете в виду по ключевому слову и как содержимое файла должны быть разобрано, чтобы найти полный набор ключевых слов. Если «aa» - это ключевое слово, должно ли оно соответствовать «aaa» или, может быть, «aa()»? Может ли ключевое слово содержать цифры в нем?

Простое решение состоит в том, чтобы сказать, что ключевые слова являются только алфавитами и должны соответствовать смежным . буквенные строки ровно, без учета регистра Кроме того, матчи следует рассматривать построчно, а не приговор по приговору Мы можем использовать регулярные выражения, чтобы найти буквенные последовательности и наборы для проверки локализации следующим образом:.

keys.txt

aa bb 

test.txt

aa is good 
AA is good 
bb is good 
cc is not good 
aaa is not good 

test.py

import re 

keyfile = "keys.txt" 
testfile = "test.txt" 

keys = set(key.lower() for key in 
    re.findall(r'\w+', open(keyfile , "r").readline())) 

with open(testfile) as f: 
    for line in f: 
     words = set(word.lower() for word in re.findall(r'\w+', line)) 
     if keys & words: 
      print(line, end='') 

Результат:

aa is good 
AA is good 
bb is good 

Добавить несколько правил для того, что вы имеете в виду матч, и это становится все более сложным.

EDIT

Предположим, у вас есть одно ключевое слово в каждой строке, и вы просто хотите подстроке (то есть, «аа» соответствует «ааа») вместо поиска по ключевым словам, вы могли бы сделать

keyfile = "keys.txt" 
testfile = "test.txt" 

keys = [key for key in (line.strip() for line in open(keyfile)) if key] 

with open(testfile) as f: 
    for line in f: 
     for key in keys: 
      if key in line: 
       print(line, end='') 
       break 

Но я просто догадываюсь, каковы ваши критерии.

+0

я есть попробовал это, но имел пару проблем; 1. по какой-то причине он ничего не ищет, если ключевые слова вводятся по одной строке, как aa bb cc если я поставил ключевые слова в одной строке, тогда он возвращает только bb 2.во-вторых, что, если я хочу вернуть 'aaa', а если найти ключевое слово 'aa' – Saadi381

+0

, тогда вам понадобится другое [регулярное выражение] для функции 're.findall()'. –

+0

Входные файлы могут иметь много форматов и невозможно охватить все возможности. Вы могли бы поместить образцы в свой вопрос, как я сделал в своем ответе. Для одного ключа в строке вы можете прочитать файл по строке, вычеркнуть пробелы, а затем фильтровать пустые поля, такие как 'keys = [ключ для ключа in (line.strip() для строки в open (keyfile)), если key]'. Чтобы соответствовать '' aaa'', вы выполняете поиск подстроки вместо регулярного выражения. – tdelaney

0
keywords = input("Please Enter keywords path as c:/example/ \n :") 
keys = open((keywords), "r").readline() 
keys = keys.split(',') # separates key strings 
with open("c:/saad/saad.txt") as f: 
    for line in f: 
     for key in keys: 
      if key.strip() in line: 
       print(line) 

Вы читаете строку в виде одной строки. Вам нужно составить список каждой разделенной запятой строки. Затем проверьте каждый ключ для каждой строки (удаление пробелов вокруг ключа)

Это предполагает, что файл ключевого слова что-то вроде: аа хорошо, бб хорошо, спама, яйца

Смежные вопросы