2016-07-20 10 views
0

Plsは簡単なことをしようとしているプログラミングにかなり新しいですが、理解できないようです。おそらく明らかなことでしょう。python27 csvファイルから特定の列だけを抽出する

約6列のデータが入った膨大なcsvファイルを解析し、2列だけを辞書に抽出する必要があります。後でjsonペイロードを使用してAPI呼び出しを構築します。余分なデータがあれば、呼び出しは失敗します。

私は、選択した列だけで構成されたcsvファイルから辞書を作成する必要があります。たとえば、column1とcolumn5はキー、値構造を保持しています。これまでは、キーのみ、またはすべてのキーと値を出力できましたが、特定のキー値データセットは出力できませんでした。

私は、この使用して標準python27csvモジュール、私は私が持っているものと仕事をしなければならないようなパンダなどの追加何を達成する必要があります。私はImが明白な何かを見逃していることを知っているが、それを理解できない。ヘルプは非常に高く評価されます。

ソースファイルの例:辞書に

column1,column2,column3,column4,column5 
joe,43,888-123-4567,seattle,toyota 
bill,18,888-123-4567,vancouver,gm 
sally,32,888-987-1234,la,ford 

所望の出力:

[{'column1':'joe', 'column5':'toyota'},{'column1':'bil', 'column5':'gm'},{'column1':'sally', 'column5':'ford'}] 

コードスニペット:

import csv 

def parseSourceFile(filename): 
    filtered_data = {} 
    reader = csv.DictReader(open(filename, "rb")) 

    # some for loop here extracting only column1 and column5 with their values appending to filtered_data 

    return result 

def main(): 
    readerObj = parseSourceFile('somefile.csv') 
    for row in readerObj: 
     print row  #at this point i only want columns1,5 k,v data 

if __name__ == '__main__': 
    main() 

答えて

0

あなたがリストに必要な鍵を格納することができ、その後、CSVファイルの使用辞書の理解から読み込まれたすべての行は、あなたが必要とするキーを選択する:

import csv 
import pprint 

KEYS = [ 
    'column1', 
    'column5' 
] 

def parseSourceFile(filename): 
    with open(filename) as f: 
     reader = csv.DictReader(f) 
     return [{key: row[key] for key in KEYS} for row in reader] 

pprint.pprint(parseSourceFile('somefile.csv')) 

出力:何かについて

[{'column1': 'joe', 'column5': 'toyota'}, 
{'column1': 'bill', 'column5': 'gm'}, 
{'column1': 'sally', 'column5': 'ford'}] 
+0

ありがとう、ありがとう! – New2Python

0

何を

import csv 

def parseSourceFile(filename): 
    reader = csv.DictReader(open(filename, "r")) 

    result = [] 
    for row in reader: 
     result.append({k:v for (k,v) in row.items() if k in ['column1', 'column5']}) 

    return result 

def main(): 
    result = parseSourceFile('so.csv') 

    # Print what you wrote you expected 
    print(result) 

    # Or iterate over the list elements and print each on separate lines 
    for row in result: 
     print(row) 

if __name__ == '__main__': 
    main() 

出力:

 
[{'column1': 'joe', 'column5': 'toyota'}, {'column1': 'bill', 'column5': 'gm'}, {'column1': 'sally', 'column5': 'ford'}] 

{'column1': 'joe', 'column5': 'toyota'} 
{'column1': 'bill', 'column5': 'gm'} 
{'column1': 'sally', 'column5': 'ford'} 
+0

おかげさまで、ありがとうございます! – New2Python

関連する問題