使用Python DictReader获取特定行和值

6 投票
4 回答
10968 浏览
提问于 2025-04-16 11:05

我有一个CSV文件,想要获取第20行第3列的一个特定值。

但是到目前为止,我只成功显示了第3列(这里叫“名字”)的所有值。

这是我的Python代码

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

我该如何只显示并获取特定行的值呢?

4 个回答

1

简单来说,就是把 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']

希望这对你有帮助。

4

直接跳到我们想要的那一行,就像其他回答里提到的,不过这里是用切片来处理读取CSV文件的迭代器,而不是手动循环:

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

(我知道这段代码看起来不太优雅,但只是为了说明这个观点。)

10

简单的解决办法:

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

我去掉了中间变量 score

需要注意的是,这种方法并不是最优的,因为你需要一直循环,直到找到想要的那一行。不过我不确定在 DictReader 中是否可以随机访问某一行。

撰写回答