Python - CSV阅读器列表理解

Ene*_*nes 4 python csv list-comprehension list

我正在尝试使用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]
Run Code Online (Sandbox Code Playgroud)

我获取第一列中的值,但a1为空.如果我先写a1,那么a0是空的.

我知道一个简单的解决方案,插入

reader=[x for x in reader]
Run Code Online (Sandbox Code Playgroud)

但只是好奇的原因.当您从阅读器读取条目时,它是否被删除?

示例myfile.txt

c11 c21 c31
c21 c22 c32
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 8

您不能reader多次循环,而不是再次将基础文件重新启动.

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

a0, a1, a2 = zip(*reader)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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')
Run Code Online (Sandbox Code Playgroud)