我正在尝试使用 CSV 阅读器有效地读取文件中的列。代码是:

import csv
csv.register_dialect('csvrd', delimiter='\t', quoting=csv.QUOTE_NONE)


with open('myfile.txt', 'rb') as f:
    reader = csv.reader(f,'csvrd')
    a0=[x[0] for x in reader]
    a1=[x[1] for x in reader]

我获得了第一列中的值,但 a1 为空。如果我先写 a1,那么 a0 就是空的。

我知道一个简单的解决方案,插入
reader=[x for x in reader]

但只是好奇原因。当您从阅读器中阅读条目时,是否将其删除?

示例 myfile.txt
c11 c21 c31
c21 c22 c32

最佳答案

您不能多次循环 reader,除非将底层文件重新倒回开始。

但是不要那样做;使用 zip(*reader) 将行转置为列:

a0, a1, a2 = zip(*reader)

演示:
>>> import csv
>>> csv.register_dialect('csvrd', delimiter='\t', quoting=csv.QUOTE_NONE)
>>> data = '''\
... c11\tc21\tc31
... c21\tc22\tc32
... '''
>>> reader = csv.reader(data.splitlines(True), 'csvrd')
>>> a0, a1, a2 = zip(*reader)
>>> a0
('c11', 'c21')
>>> a1
('c21', 'c22')
>>> a2
('c31', 'c32')

关于Python - CSV 阅读器列表理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22642674/

10-12 17:57