Поиск по ключевым словам в текстовом файле со словарем с python - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь найти много ключевых слов в текстовом файле и вернуть целые числа / числа с плавающей запятой после ключевого слова. Я думаю, что возможно использовать словарь, где ключи - это ключевые слова в текстовом файле, а значения - это функции, которые возвращают следующее значение.

import re

def store_text():
    with open("path_to_file.txt", 'r') as f:
        text = f.readlines()
        return text

abc = store_text()

def search():
        for index, line in enumerate(abc):
            if "His age is:" in line:
                return int(re.search(r"\d+", line).group())


dictionary = {
    "His age is:": print(search())
}

Код возвращает значение, которое я ищу в текстовом файле. но в search () я хочу избавиться от повторного ввода ключевого слова, потому что оно уже есть в словаре. Позже я хочу сохранить значения, найденные в файле Excel.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

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

import re
from multiprocessing import Pool

search_kwrds = ["His age is:", "His name is:"] # add more keywords if you need.
search_regex = "|".join(search_kwrds)

def read_search_text():
    with open("path_to_file.txt", 'r') as f:
        text = f.readlines()
        return text


def search(search_line):
    search_res = re.search(search_regex, search_line)
    if search_res:
        kwrd_found = search_res.group(0)
        if kwrd_found:
            suffix_val = int(re.search(r"\d+", search_line).group())
            return {kwrd_found: suffix_val }
    return {}


if __name__ == '__main__':

    search_lines = read_search_text()
    p = Pool(processes=1) # increase, if you want a faster search
    s_res = p.map(search,search_lines)
    search_results ={kwrd: suffix for d in s_res for kwrd, suffix in d.items()}
    print(search_results)

Вы можете добавить другие ключевые слова в список и искать их. Это сфокусировано на поиске, где у вас будет одно ключевое слово в данной строке, а ключевые слова не повторяются в последующих строках.

1 голос
/ 28 февраля 2020

Вы можете разместить ваши ключевые слова, которые вам нужно искать в списке. Таким образом, вы в конечном итоге задаете свои входные ключевые слова только один раз в вашей программе. Кроме того, я изменил вашу программу, чтобы сделать ее немного более эффективной. Объяснение дано в комментариях.

import re
import csv

list_of_keywords = ["His age is:","His number is:","Your_Keyword3"]   # You can add more keywords to find and match to this list

def store_text():
    with open("/Users/karthick/Downloads/sample.txt", 'r') as f:
        text = f.readlines()
        return text

abc = store_text()

def search(input_file):   
    # Initialize an empty dictionary to store the extracted values
    dictionary = dict()
    #Iterate through lines of textfile
    for line in input_file:
        #FOr every line in text file, iterate through the keywords to check if any keyword is present in the line
        for keyword in list_of_keywords:
            if keyword in line:
                #If any matching keyword is present, append the dictionary with new values
                dictionary.update({keyword : re.search(r"\d+", line).group()})
    return dictionary

#Call the above function with input
output_dict = search(abc)

Для хранения выходных значений в Excel csv:

#Write the extracted dictionary to an Excel csv file
with open('mycsvfile.csv','w') as f:  #Specify the path of your output csv file here
    w = csv.writer(f)
    w.writerows(output_dict.items())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...