Почему мой текстовый поиск Python работает правильно для некоторых строк в моем CSV-файле, но не для других? - PullRequest
0 голосов
/ 27 июня 2018

Я написал скрипт на python, который открывает и читает файл CSV, имеющий следующую структуру

ID|Search Company|Past Job Title 1|Past Job Title 2|Past Job Title 3|

Затем записывает файл CSV со следующей структурой

ID|Search Company|Consolidated Company| Past Job Title 1|Past Job Title 2|Past Job Title 3|

У меня также есть следующий код Python

input_filename = 'filename.csv'

input_headers = ['ID',
                 'Search Company',
                 'Past Job Title 1',
                 'Past Job Title 2',
                 'Past Job Title 3']

output_headers = ['ID',
                 'Search Company',
                 'Consolidated Company',
                 'Past Job Title 1',
                 'Past Job Title 2',
                 'Past Job Title 3']



#set up the file writer
out_employees_file = open('consolidated_' + input_filename, 'wb')
employees_writer = unicodecsv.DictWriter(out_employees_file, 
lineterminator='\n', escapechar='\\', fieldnames=output_headers)

#set up the file reader
employees_file = open(input_filename, 'r', encoding='utf-8')
employees_reader = csv.reader(employees_file, delimiter=',')


for row in employees_reader:
    consolidated_name = ''
    if 'Searched Company' != row[1]:
        if row[1] in row[2]:
            consolidated_name = row[2]

        if row[1] in row[3]:
            consolidated_name = row[3]

        if row[1] in row[4]:
            harmonized_name = row[4]

    employees_writer.writerow({'ID': row[0],
                           'Consolidated Company':consolidated_name,
                           'Past Job Title 1':row[2],
                           'Past Job Title 2':row[3],
                           'Past Job Title 3':row[4]})
employees_file.flush()
employees_file.close()

Мой скрипт выполняется, проблема в том, что он работает только так, как ожидалось, при чтении определенных строк файла CSV. По какой-то причине Python может найти название компании, которое я ищу, только в некоторых строках файла CSV.

Я приведу пример входного файла.

ID|Search Company|Past Job Title 1|Past Job Title 2|Past Job Title 3|
 1|Good Company  |Bad Company     | Horrid Cmp LLC |Good Company    |
 2|Good Company  |Good Company    | Rotten Company |Stupid Company  |
 3|Good Company  |Stinky Company  | Good Company   |Company Malo    |

Это вывод, который я получаю

ID|Search Company|Consolidated Company|Past Job Title 1|Past Job Title 2|Past Job Title 3|
 1|Good Company  |                    |Bad Company     | Horrid Cmp LLC |Good Company    |
 2|Good Company  |Good Company        |Good Company    | Rotten Company |Stupid Company  |
 3|Good Company  |                    |Stinky Company  | Good Company   |Company Malo    |

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

Мне не удалось выяснить, почему мой сценарий работает для некоторых строк моего входного файла, но не работает для других строк моего входного файла. Я бы подумал, что мой сценарий будет работать на все или не работать на все, но это не так, почему это так?

1 Ответ

0 голосов
/ 27 июня 2018

Я изменил ваш код, и он работает:

import csv
import unicodecsv

input_filename = 'test.csv'

input_headers = ['ID',
                 'Search Company',
                 'Past Job Title 1',
                 'Past Job Title 2',
                 'Past Job Title 3']

output_headers = ['ID',
                  'Search Company',
                  'Consolidated Company',
                  'Past Job Title 1',
                  'Past Job Title 2',
                  'Past Job Title 3']

#set up the file writer
out_employees_file = open('consolidated_' + input_filename, 'wb')
employees_writer = unicodecsv.DictWriter(out_employees_file,
lineterminator='\n', escapechar='\\', fieldnames=output_headers)

#set up the file reader
employees_file = open(input_filename, 'r', encoding='utf-8')
employees_reader = csv.reader(employees_file, delimiter=',')

rows = []

for row in employees_reader:
    consolidated_name = ''
    if 'Search Company' != row[1]:
        if row[1] in row[2]:
            consolidated_name = row[2]

        if row[1] in row[3]:
            consolidated_name = row[3]

        if row[1] in row[4]:
            consolidated_name = row[4]
        r = {'ID': row[0],
             'Search Company': row[1],
             'Consolidated Company': consolidated_name,
             'Past Job Title 1': row[2],
             'Past Job Title 2': row[3],
             'Past Job Title 3': row[4]}
        rows.append(r)
employees_writer.writerows(rows)

Вы не написали вторую строку в своей версии (Поиск компании), и у вас был хотя бы тип в условии if:

if 'Searched Company' != row[1]:

Но строка называется «Поиск компании». Вы пропустили "Эд".

Я думаю, это было главной причиной вашей проблемы. Также вы должны собрать строки и написать их с помощью .writerows ().

Мой вывод:

1,Good Company,Good Company,Bad Company,Horrid Cmp LLC,Good Company
2,Good Company,Good Company,Good Company,Rotten Company,Stupid Compny
3,Good Company,Good Company,Stinky Company,Good Company,Company Malo

Я отбросил заголовки, я знаю ...

Редактировать: чтобы включить заголовки, добавьте

employees_writer.writer.writerow(output_headers)

как раз перед

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