使用花括号输出列表中的项目

时间:2014-02-17 13:25:29

标签: python python-2.7

我有一个带'n'行的文本文件。我想将每行的第一个单词,第二个单词,第三个单词,...提取到list1,list2,list3,...

假设输入txt文件包含:

a1#a2#a3
b1#b2#b3#b4
c1#c2

读取文件后,输出应为:

List1: {a1,b1,c1}
List2: {a2,b2,c2}
List3: {a3,b3}
List4: {b4}

代码:

f = open('path','r')
for line in f:
    List=line.split('#')
    List1 = List[0]
    print '{0},'.format(List1),
    List2 = List[1]
    print '{0},'.format(List2),
    List3 = List[2]
    print '{0},'.format(List3),
    List4 = List[3]
    print '{0},'.format(List4),

输出

a1,b1,c1,a2,b2,c2,a3,b3,b4

1 个答案:

答案 0 :(得分:1)

你真的不想在这里使用单独的列表;只需使用列表列表。在这里使用csv模块可以使处理拆分更容易:

import csv

columns = [[] for _ in range(4)]  # 4 columns expected

with open('path', rb) as f:
    reader = csv.reader(f, delimiter='#')
    for row in reader:
        for i, col in enumerate(row):
            columns[i].append(col)

或者,如果列数需要动态增长:

import csv

columns = []

with open('path', rb) as f:
    reader = csv.reader(f, delimiter='#')
    for row in reader:
        while len(row) > len(columns):
            columns.append([])
        for i, col in enumerate(row):
            columns[i].append(col)

或者您可以使用itertools.izip_longest()来转置CSV行:

import csv
from itertools import izip_longest    

with open('path', rb) as f:
    reader = csv.reader(f, delimiter='#')
    columns = [filter(None, column) for column in izip_longest(*reader)]

最后,您可以使用以下方式打印列:

for i, col in enumerate(columns, 1):
    print 'List{}: {{{}}}'.format(i, ','.join(col))

演示:

>>> import csv
>>> from itertools import izip_longest
>>> data = '''\
... a1#a2#a3
... b1#b2#b3#b4
... c1#c2
... '''.splitlines(True)
>>> reader = csv.reader(data, delimiter='#')
>>> columns = [filter(None, column) for column in izip_longest(*reader)]
>>> for i, col in enumerate(columns, 1):
...     print 'List{}: {{{}}}'.format(i, ','.join(col))
... 
List1: {a1,b1,c1}
List2: {a2,b2,c2}
List3: {a3,b3}
List4: {b4}