我有以下格式的数据(在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']]
答案 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']]