2017-04-25 42 views
0

使用python如何加载其中一列是数组的csv文件。如何在Python中加载具有列中数组的列的csv文件

,所以如果我有一个像这样的

time,account,status,values 
0912,srvA,disabled,[['removed', 'admin'], ['added','disabled', '0x9923'], ['filler', 'filler', 'filler'] 

当我在CSV文件中读取一个CSV文件。列值作为单个字符串读入。而不是一组数组。

我该如何读取此文件,以便可以像这样访问值。

with open(fileName[0], 'r') as reader : 
       importReader = csv.reader(reader); 
       for line in importReader: 
        if line[0] != "time" and line[1] != "account" and line[2] != "status": 
         print(line[4][0]) 

应打印

['removed', 'admin'] 

回答

0

如果你的“价值”栏是否正确格式化为实际列表和被读取作为一个字符串,您可以使用eval()将其转换为一个列表:

>>> list_as_string = '[["removed", "admin"], ["added","disabled", "0x9923"], ["filler", "filler", "filler"]]' 
>>> type(list_as_string) 
<type 'str'> 
>>> list_as_list = eval(list_as_string) 
>>> type(list_as_list) 
<type 'list'> 

因此,要解决您的例子:

with open(fileName[0], 'r') as reader : 
    importReader = csv.reader(reader) 
    for line in importReader: 
     print(eval(line[4])[0]) 

将打印在评估列表中的第一子列表中的“值”列中的每个读取线

+0

哦,我希望在我更改所有代码之前看到了这个。如果我不能让我的代码工作,我可能不得不这样做。 –

+0

如果这个答案是正确的,你可以把它标记为答案。 – Jeremy

0

CSV文件不支持这样的名单,所以严格来说这可能不是一个CSV文件。您可以在该行的周围放置方括号,并将其作为JSON导入。这可能会起作用。

import json 

line = '[' + line + ']' 
mylist = json.loads(line) 
print(mylist[3][0]) 

您还需要在值的行末把另一个“]”。

+0

看来,这可能是更好的改变我的保存格式比。并改变它,所以我把我的文件保存为json。 –

+0

这可能是最好的主意。 XML是另一种流行的格式,但我喜欢json。这非常简单,而且效果很好。 https://docs.python.org/2/library/json.html – dogoncouch

相关问题