Как извлечь значения из файлов .csv и поместить их в массив? - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь извлечь значения из 2 CSV-файлов с помощью Python. Из 1-го файла я получаю ключевое слово, которое будет искать во 2-м файле. После того, как ключевое слово найдено, я пытаюсь собрать значения из другого столбца и поместить их в массив.

Вот как выглядит первый файл (из которого я получаю ключевое слово):

Action;ItemID;Title;StartPrice;CustomLabel
Revise;13;some title;990;keyword1
Revise;12;some title;1990;keyword2
Revise;14;some title;2990;keyword3

Вот как выглядит второй файл .csv:

Keyword;Item_Title;Item_Price;Item_Condition;Item_Link
keyword1;title1;59.0;used;link1
keyword1;title2;130.0;used;link2
keyword1;title3;165.0;used;link3
keyword2;title1a;600.0;used;link1a
keyword2;title2a;800.0;used;link2a
keyword2;title3a;899.99;used;link3a
keyword2;title4a;1895.0;new;link4a

Я пытаюсь получить значение CustomLabel и найти его в столбце Keyword во 2-м файле. Цель состоит в том, чтобы собрать значения Item_Price для каждого значения ключевого слова в массив.

Пока я пробовал это, но это не работает, так как он собирает все Item_Price для каждого ключевого слова в один массив.

Это код вопроса:

import csv

prices=[]

with open("1.csv",'r') as file:
    file_reader=csv.DictReader(file,delimiter=';')
    for row in file_reader:
        item=row['CustomLabel']

        with open("1.csv",'r',encoding='utf-8') as file1:
            file_reader1=csv.DictReader(file1,delimiter=';')
            for row1 in file_reader1:
                if item in row1['Keyword']:
                    print(row1['Keyword']+" , "+row1['Item_Price'])
                    price=row1['Item_Price']
                    prices.append(price)
print(prices)

И, как вы сами можете понять, я получаю массив со всеми ценами для всех ключевых слов:

['59.0', '130.0', '165.0', '600.0', '800.0', '899.99', '1895.0']

Мой вопрос: как получить массив для каждого ключевого слова в файле? Мой подход работает вообще? Или мне нужно сделать что-то по-другому? Любые предложения о том, как этого добиться, приветствуются. Я использую python 3.6.5 и при необходимости могу установить любые пакеты.

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Вы можете сделать это, сначала создав словарь для сопоставления каждого CustomLabel со списком Item_Price с из второго файла, а затем используя этот словарь для извлечения их из столбца Keyword во втором файле

import csv

prices = {}

with open("1.csv", 'r') as file:
    for row in csv.DictReader(file, delimiter=';'):
        custom_label = row['CustomLabel']
        if custom_label not in prices:
            prices[custom_label] = []

with open("2.csv", 'r', encoding='utf-8') as file:
    for row in csv.DictReader(file, delimiter=';'):
        keyword = row['Keyword']
        if keyword in prices:
            prices[keyword].append(row['Item_Price'])

from pprint import pprint
pprint(prices)

Выход:

{'keyword1': ['59.0', '130.0', '165.0'],
 'keyword2': ['600.0', '800.0', '899.99', '1895.0'],
 'keyword3': []}
0 голосов
/ 27 октября 2018

функция numpy np.loadtxt делает именно это.Это хорошо задокументировано здесь

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

...