2013-06-21 19 views
5

Ahoy、大規模なCSVファイルをフィルタリングするPythonスクリプトを作成しています。行内の指定された値が条件と一致する場合、CSVから行を戻す

私は自分の基準を満たす行を保持したいだけです。

私の入力は、私がTotal_Depthは私がデータを読み取るためにthis answerを追ってきた0

ある行を返すようにしたい、次の形式

Locus   Total_Depth Average_Depth_sample Depth_for_17 
chr1:6484996 1030   1030     1030 
chr1:6484997 14   14      14 
chr1:6484998 0   0      0 

でCSVファイルであります。しかし、行間を解析して、私の状態に合った線を引き出そうとしている。ここで

は私が持っているコードは、これまでです:

import csv 

f = open("file path", 'rb') 
reader = csv.reader(f) #reader object which iterates over a csv file(f) 
headers = reader.next() #assign the first row to the headers variable 
column = {} #list of columns 
for h in headers: #for each header 
    column[h] = [] 
for row in reader: #for each row in the reader object 
    for h, v in zip(headers, row): #combine header names with row values (v) in a series of tuples 
     column[h].append(v) #append each value to the relevant column 

私は私のデータが辞書形式に今あることを理解し、私は「Total_Depth」キーに基づいて、それをフィルタリングしたいが、私はわかりませんよこれを行う方法。私は関連する行を選択するために 'if'ステートメントを使用することを目指していますが、辞書構造でこれを行う方法はわかりません。

アドバイスをいただければ幸いです。

... 
for row in reader: #for each row in the reader object 
    r = zip(headers, row): 
    if r['Total_Depth'] == 0: 
     for h, v in r: 
      column[h].append(v) 

答えて

8

使用リストの内包表記を:あなたは郵便番号の完全な結果を保存する場合SB :)

+0

ありがとう@falsetru、それは治療を働いています。 –

2

、あなたは、割り当てる前に、適切なヘッダーを確認することができます。

import csv 

with open("filepath", 'rb') as f: 
    reader = csv.DictReader(f) 
    rows = [row for row in reader if row['Total_Depth'] != '0'] 

for row in rows: 
    print row 

DictReader

+0

ありがとう@blazetopher :) –

+0

問題はない、私はDictReaderを知らなかった! – blazetopher

+1

@s_boardmanあなたの問題に合っているかどうかは分かりませんが、[numpy.genfromtxt](http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html)をご覧ください。 )。潜在的な利点は、関数がnumpy.ndarray(構造化)となり、高度なスライシングが可能になることです。また、データ型を細かく制御することもできます(重要な場合)。 – blazetopher

1

あなたがC並列リストを台無しに持っているので、非常に困難に行操作を使用しているリストの辞書。 namedtuplesは、表形式のデータを収集して操作する方がずっと便利です。

他の回答は、あなたが持っている正確な問題を満たしています。明快なデータ構造を使用すると、明日の問題に役立ちます。

+0

ありがとう@msw、私はnamedtuplesに掘り下げてみて、それでスクリプトのより良いバージョンを構築できるかどうかを見てみましょう。 :) –

関連する問題