如何从.csv文件中提取值并将其放入数组中?

时间:2018-10-27 18:12:24

标签: python arrays csv extract

我正在尝试使用python从2个.csv文件中提取值。从第一个文件中,我得到一个将在第二个文件中搜索的关键字。找到关键字后,我试图从另一个列中收集值并将它们放入数组中。

这是第一个文件的样子(我从中获取关键字的文件):

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列中进行搜索。目标是将每个关键字值的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 :(得分:1)

numpy的函数np.loadtxt就是这样做的。 here

有据可查

或者,如果跟踪列的标题对您很重要,请查看记录在there中的熊猫的pd.read_csv

答案 1 :(得分:0)

您可以执行以下操作:首先创建一个字典,将每个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': []}