2017-04-25 9 views
0

pythonの使用列の1つが配列であることをどうやってCSVファイルをロードできますか?Pythonでロードする方法配列に列があるロードcsvファイル

ので、私は、私はcsvファイルを読み込むなど

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

のような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]) 

はそれほど厳密にそれはCSVファイルではないかもしれません言えば、そのようなリストをサポートしていません

['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ファイルを印刷する必要があります。あなたは、行の周りに角括弧を入れ、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

関連する問題