使用Python DictReader获取特定行和值
我有一个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 中是否可以随机访问某一行。