Программа Python для поиска определенных строк в значениях хэш-функции (кодирующий справку)

Попытка написать код, который ищет значения хэш-функции определенную строку (введенный пользователем) и возвращает хеш, если searchquery присутствует в той строке.

Выполнение этого к отчасти просто изучает Python немного больше, но это могло быть приложение реального мира, используемое отделом кадров для поиска базы данных резюме .csv определенные слова в каждом резюме.

Я хотел бы, чтобы эта программа просмотрела .csv файл, который имеет три записи на строку (id#; имя претендента; текст резюме)

Я настроил его так, чтобы это создало хеш, затем создал строку для текстовой записи хеша резюме и пытаюсь использовать .find () функция для возврата всего хеша для каждого экземпляра.

То, что я хотел бы, - то, если слово "с.б.б." используется в качестве поискового запроса, и это найдено в s ['resumetext'] для трех заявителей (строки в .csv файле), это печатает идентификатор, имя и резюме для каждой строки, которая имеет его. (Все три заявителя)

Поскольку это прямо сейчас, моя программа печатает первую строку в .csv файле (резюме печати ['идентификатор'], резюме ['имя'], резюме ['resumetext']), каков searchquery, является ли это в resumetext или нет.

наконец, есть ли лучшие пути к выполнению этого, путем поиска документов слова, и .txt файлов PDF в папке для определенных слов с помощью Python (я только что начал читать о модуле ре, и задаюсь вопросом, может ли это быть маршрутом, вместо того, чтобы поместить все в .csv файл.)

def find_details(id2find):
    resumes_f=open("resume_data.csv")
    for each_line in resumes_f:
        s={}
        (s['id'], s['name'], s['resumetext']) = each_line.split(";")
        resumetext = str(s['resumetext'])
        if resumetext.find(id2find):
            return(s)
        else:
            print "No data matches your search query. Please try again"

searchquery = raw_input("please enter your search term")
resume = find_details(searchquery)
if resume:
    print resume['id'], resume['name'], resume['resumetext']
1
задан Diego 13 May 2010 в 04:09
поделиться

3 ответа

Строка

resumetext = str(s['resumetext'])

является избыточной, потому что s ['resumetext'] уже является строкой (поскольку она является одним из результатов вызова .split ). Итак, вы можете объединить эту строку и следующую в

if id2find in s['resumetext']: ...

. Ваш следующий else смещен - с его таким расположением вы будете печатать сообщение снова и снова. Вы хотите поместить его после цикла for else не требуется, хотя он будет работать), поэтому я бы предложил:

for each_line in resumes_f:
    s = dict(zip('id name resumetext'.split(), each_line.split(";"))
    if id2find in s['resumetext']:
        return(s)
print "No data matches your search query. Please try again"

Я также показал альтернативный способ построения dict s , хотя ваш тоже подходит.

1
ответ дан 3 September 2019 в 00:36
поделиться

Одно изменение, которое я рекомендую для вашего кода, - это изменение

if resumetext.find(id2find):

на

if resumetext.find(id2find) != -1:

, потому что find () возвращает -1, если id2find не было в тексте резюме. В противном случае он возвращает индекс, в котором id2find впервые встречается в тексте резюме, который может быть 0. Как прокомментировал @Personman, это даст вам ложное срабатывание, потому что -1 интерпретируется как True в Python.

Я думаю, что эта проблема связана с тем фактом, что find_details () возвращает только первую запись, для которой строка поиска найдена в тексте резюме. Было бы неплохо превратить find_details () в генератор, а затем вы могли бы перебирать его и распечатывать найденные записи одну за другой.

0
ответ дан 3 September 2019 в 00:36
поделиться

Что сказал @Justin Peel. Также, чтобы быть более питоническим, я бы сказал, измените

if resumetext.find (id2find)! = -1: на , если id2find в resumetext:

Еще несколько изменений: вы можете захотеть использовать нижний регистр сравнение и ввод данных пользователем, чтобы он соответствовал GPA, GPA, Gpa и т. д. Вы можете сделать это, выполнив searchquery = raw_input ("введите свой поисковый запрос"). lower () and resumetext = s ['resumetext']. lower () . Вы заметите, что я удалил явное приведение к s ['resumetext'], поскольку оно не нужно.

1
ответ дан 3 September 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: