数据转换 - Python

时间:2015-12-04 03:27:42

标签: python

我有以下格式的数据(在csv文件中):

a b c
b
a
a c d
b c
b c

我想将上述数据转换为以下格式(列表):

[['a', 'b', 'c'],
 ['b'],
 ['a'],
 ['a', 'c', 'd'],
 ['b', 'c'],
 ['b', 'c']]

到目前为止我已经这样做了:

import csv

fileName = "toydataset.csv"

data = open(fileName, 'r')
reader = csv.reader(data)
allRows = [row for row in reader]
allRows

但是,输出看起来像这样:

[['a', 'b', 'c'],
 ['b', '', ''],
 ['a', '', ''],
 ['a', 'c', 'd'],
 ['b', 'c', ''],
 ['b', 'c', '']]

如何从列表中删除这些空值,以便输出如下所示?

[['a', 'b', 'c'],
 ['b'],
 ['a'],
 ['a', 'c', 'd'],
 ['b', 'c'],
 ['b', 'c']]

3 个答案:

答案 0 :(得分:3)

In [8]: l
Out[8]: 
[['a', 'b', 'c'],
 ['b', '', ''],
 ['a', '', ''],
 ['a', 'c', 'd'],
 ['b', 'c', ''],
 ['b', 'c', '']]

In [9]: [ filter(None, a) for a in l]
Out[9]: [['a', 'b', 'c'], ['b'], ['a'], ['a', 'c', 'd'], ['b', 'c'], ['b', 'c']]

答案 1 :(得分:2)

这是另一种选择。如果你属于这种事情。

import csv


def clean_item(item):
    res = [x for x in item if x]
    return res


def main():
    # PEP-8!
    file_name = "toydataset.csv"
    with open(file_name, 'r') as data: # don't corrupt your data!
        reader = csv.reader(data)
        # PEP-8!
        all_rows = [row for row in reader if row]
        print(all_rows)


if __name__ == '__main__':
    main()

答案 2 :(得分:0)

您也可以不使用任何内置方法来执行此操作:

>>> l
[['a', 'b', 'c'], ['b', '', ''], ['a', '', ''], ['a', 'c', 'd'], ['b', 'c', ''], ['b', 'c', '']]
>>> [[i for i in j if i] for j in l]
    [['a', 'b', 'c'], ['b'], ['a'], ['a', 'c', 'd'], ['b', 'c'], ['b', 'c']]