python - 将文件中的不同列附加到不同的列表?

时间:2010-07-08 13:35:30

标签: python file list

我有一个制表符分隔文件,如下所示:

A    3    A    6
B    6    B    9
C    0    C    2

我希望阅读下面的文件:

LIST = [['A', '3'], ['B', '6'], ['C', '0'], ['A', '6'], ['B', '9'], ['C', '2']]

订单并不重要。我只关心每行以2为增量读取并分配给子列表。

有什么建议吗?

谢谢, S: - )

2 个答案:

答案 0 :(得分:3)

最直接的方式是:

>>> n = []
>>> for line in open(fname):
    els = line.split('\t')
    n.append(els[:2])
    n.append(els[2:])


>>> n
[['A', '3'], ['A', '6'], ['B', '6'], ['B', '9'], ['C', '0'], ['C', '2']]

可能稍微高效一点:

>>> g = (line.split('\t') for line in open(fname))
>>> [els[i:i+2] for els in g for i in range(0, 4, 2)]
[['A', '3'], ['A', '6'], ['B', '6'], ['B', '9'], ['C', '0'], ['C', '2']]

答案 1 :(得分:0)

这个问题实际上允许一些Pythonic解决方案。

l = open(fname).read().split()
LIST = zip(l[::2], l[1::2])

这就是它的全部。 “Bam!

或者我们可以“knock it up a notch”:

def couple(i):
    while True:
        yield (i.next(), i.next())

LIST = [w for w in couple(iter(open(fname).read().split()))]

这些的其他好处是,无论是否有4列(如示例中所示)或6列,2 ...无论

,它们都会成对读取文件

另见 pythonic-way-to-split-comma-separated-numbers-into-pairshow-do-you-split-a-list-into-evenly-sized-chunks-in-python