Соответствующая строка из списка в строку файла CSV Python - PullRequest
0 голосов
/ 01 февраля 2019

Моя цель - написать функцию, которая выполняет итерацию по CSV-файлу и достигает следующего:

  • Принимает ключевое слово, представляющее собой список строк, и возвращает все связанные коды, имеющиеключевое слово 'в описании.

Пример форматирования файла CSV:

"2399", "1", "theft-bike", "Bicycle"кража "

Например:

  1. find_that_code (['bike'])
  2. find_that_code (['bike', 'scooter'])

Вывод :

  1. [2399]
  2. []

Явозникают трудности с выяснением того, как скомпоновать оператор IF, который соответствует строкам в списке ключевых слов, в строке [3].

Для примеров вы заметите, что во втором примере ничего не выводится, хотя строка bike являетсянастоящее время струнного скутера нет.

То, что я пробовал:

def find_that_code(keywords):
codelist = []
keywords = str(keywords)


with open('codes.csv') as csv_file:
    reader = csv.reader(csv_file, delimiter=',')
    next(reader)  # skip the first row
    for row in reader:
        if row[3] == any([x in keywords for x in keywords]):
            code = row[0]
            return True
        else:
            return False

В настоящее время у меня есть код, возвращающий True или False, чтобы выяснить, где моя проблема.Но как только я получу, как сопоставить строку из списка ключевых слов со строкой [3] в CSV, я смогу завершить оставшуюся часть.

Спасибо за ваше время, и я очень ценюсоветы.

1 Ответ

0 голосов
/ 01 февраля 2019

Если вы ищете, чтобы найти все строки, для которых любое из указанных ключевых слов появляется в столбце описания:

def find_that_code(keywords):
    codelist = []

    with open('codes.csv') as csv_file:
        reader = csv.reader(csv_file, delimiter=',')
        next(reader)  # skip the first row
        for row in reader:
            if any(k in row[3].lower() for k in keywords):
                codelist.append(row[0])

    return codelist

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

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

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