使用Python DictReader获取特定的行和值

时间:2011-02-02 15:26:03

标签: python csv

我有一个csv文件,我想尝试获取一个特定值,比如第20行第3列。

但到目前为止,我所管理的只是在第3列显示所有值(此处称为“名称”)。

这是我的Python代码

d = DictReader(r.csv().split('\n'))
for line in d:
    score = line["name"]
    print score

如何仅显示并获取特定行的值?

4 个答案:

答案 0 :(得分:5)

天真的解决方案:

  target_row = 5
  for num, line in enumerate(d):
      if num == target_row:
          print line["name"]
          break

我删除了中间变量score

请注意,这是非最佳的,因为您迭代直到到达所需的行,但我不知道是否有随机访问DictReader中的行。

答案 1 :(得分:2)

向前跳到所需的行,就像在另一个答案中一样,但是在CSV读取迭代器而不是手动循环上切片:

import csv, itertools
rownum = 20
colname = "name"
line = itertools.islice(d, rownum - 1, rownum).next()
score = line[colname]

(不是最美丽的代码,我知道,但这只是为了说明这一点。)

答案 2 :(得分:0)

简而言之,将 csv.DictReader 的输出转换为列表格式,然后使用索引访问值。

  

注意:当您按索引访问时返回的值将是一个对象,其键与CSV文件中的列名相对应


用例:

我也有类似的需求。我只想读取行的子集,例如从总共100行中读取第10-15行。

一个可行的简单解决方案是将其转换为列表:

# Observe that I am converting the output of DictReader into a list format
lines = list(csv.DictReader(open('somefile.csv', 'r')))

# Once I have the list of objects, I can simple access it with range
for i in range(10, 15):
    line = lines[i]
    # If you want to read the value of a specific column
    print line['column_name']

希望这会有所帮助。

答案 3 :(得分:0)

如果您只知道列号和行号,可以这样:

TheRow = 2      # Note that row 1 is the header row
TheColumn = 2   # first column == 0
for row in d:
    if d.line_num == TheRow:
        print("row %s: %s" % (str(d.line_num), str(row) ) )
        print( row[d.fieldnames[TheColumn]] )

输出:

row 2: {'t1': '12', 't2': '23', 't3': '31'}
31