我有如下製表符分隔的文件:蟒蛇 - 將不同的列從一個文件附加到不同的列表?
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爲增量讀取並分配給子列表。
有什麼建議嗎?
感謝, 小號:-)
我有如下製表符分隔的文件:蟒蛇 - 將不同的列從一個文件附加到不同的列表?
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爲增量讀取並分配給子列表。
有什麼建議嗎?
感謝, 小號:-)
最簡單的方法是:
>>> 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']]
這個問題實際上是允許一些Python的解決方案。
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-pairs和 how-do-you-split-a-list-into-evenly-sized-chunks-in-python
謝謝SilentGhost! – 2010-07-08 14:34:13
eeeewww :)。應該有更好的方法來做到這一點。至少說'(0,2)'而不是'範圍(0,4,2)'。另外,如果你只是使用'split()'(無參數),它將在空格,製表符,新行上進行分割......你可以執行'g = open(fname).read()。split()' – 2010-07-09 01:30:28