将列表拆分为单个条目

时间:2011-08-05 19:19:39

标签: python

我从CSV文件中提取一些电子邮件,然后将其保存到另一个CSV文件中。

电子邮件变量应采用以下格式:

email = ['email@email.com'], ['email2@company.com'], ['email3@company2.com']

但在某些情况下,它将以:

返回
email = ['email@email.com', 'email2@email.com'], ['email3@email.com']

在某些行中,它会找到2封电子邮件,因此它就像这样呈现。

改变它的有效方法是什么?

3 个答案:

答案 0 :(得分:1)

下一步应该非常有效:

>>> import itertools
>>> data = [ ['email@email.com', 'email2@email.com'], ['email3@email.com'] ]
>>> [[i] for i in itertools.chain(*data)]
[['email@email.com'], ['email2@email.com'], ['email3@email.com']]

答案 1 :(得分:0)

data = [ ['email@email.com', 'email2@email.com'], ['email3@email.com'] ]

def flatten(data):
    for item in data:
        if isinstance(item, basestring):
            yield item
        else:
            for i in item:
                yield [i]

或者,如果你想支持任意级别的嵌套:

def flatten(data):
    for item in data:
        if isinstance(item, basestring):
            yield [item]
        else:
            for i in flatten(item):
                yield i

如果你只需要一个电子邮件列表,没有每个元素都包含在列表中(这对我来说似乎更合理),解决方案就更简单了:

import itertools
print list(itertools.chain.from_iterable(data))

答案 2 :(得分:0)

如果您使用的是CSV文件,则可能需要尝试使用标准库中的CSV模块。 http://docs.python.org/library/csv.html

示例:

$ cat > test.csv
['email@email.com', 'email2@email.com'], ['email3@email.com']

$ python
>>> import csv
>>> reader = csv.reader(open('test.csv', 'r'))
>>> for row in reader:
...     print row
... 
["['email@email.com'", " 'email2@email.com']", " ['email3@email.com']"]

我所做的可能不是你想要的,但如果你看图书馆,你可能会找到你需要的东西。