2017-04-25 41 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

相關問題