使用csv.reader()时访问数据

时间:2018-07-30 20:18:29

标签: python csv

这是我的数据示例,

match_type search campaign group phrase physicians Branded System phrase phrase locations Branded System phrase exact find Non-Branded Brand exact

我正在使用csv.reader读取我拥有的csv。

with open("pos_input.csv") as csvfile:
    inputcsv = csv.reader(csvfile, delimiter=',')
    for row in inputcsv:
        match = row[1:2]
        search = row[2:3]
        campaign = row[3:4]
        ad = row[4:]

然后我将csv中的每一列分配给一个对象。例如,第一列保存有关每一行的值。因此,

print(campaign)

将导致

['Campaign'] ['Branded System'] ['Branded System'] ['Non-Branded Brand']

campaign是列标题,然后的每个字符串代表行输入。

我的问题是,如何仅访问“非品牌”。我已经尝试过了,

campaign[3]

但会导致错误

IndexError: list index out of range

我需要在这里进行一些转换吗?

3 个答案:

答案 0 :(得分:1)

看起来您的目标是分隔csv的列。首先,请确保csv文件以逗号分隔:

match_type,search,campaign,group
phrase,physicians,Branded System,phrase
phrase,locations,Branded System,phrase
exact,find,Non-Branded Brand,exact

然后,您需要遍历csv.reader返回的对象,并使用该对象遍历文件的每一行。在每次迭代中,您将按从0开始的相应索引访问每一列。例如,第三列是索引2。因此,要保存“ campaing”列,只需使用索引2。下面的代码保存所有列,但这并不安全,因为请注意,如果您打开的列数较少的文件,则会引发异常。

import csv
match = []
search = []
campaign = []
group = []  
with open("pos_input.csv") as csvfile:
    inputcsv = csv.reader(csvfile, delimiter=',')
    for row in inputcsv:
        match.append(row[0])
        search.append(row[1])
        campaign.append(row[2])
        group.append(row[3])

因此“非品牌品牌”是露营品牌[3]:

print(campaign[3])

结果:

Non-Branded Brand

答案 1 :(得分:0)

在大多数编程语言中,列表从0开始。因此,列表中的第一项将是campaign[0]。因此,第四项Non-Branded Brand是通过campaign[3]访问的。

答案 2 :(得分:0)

您的数据提取错误。通过使用切片,您可以为列值创建1元素列表。最肯定不是您想要的。最重要的是,您不会保留各个行的提取值。因此,您没有“非品牌品牌”。

改为使用以下类似内容:

with open("pos_input.csv") as csvfile:
    data = list(csv.reader(csvfile, delimiter=','))
print(data[3][2]) # to access the 4th row, 3rd column