2016-11-02 4 views
0

私は数百行のCSVファイルを持っています。Python3オープンCSVは論理書き込み新しいCSV

それをシンプルに保つために、これら三つのヘッダと一緒に行くことができます:私はこれが

PetDick, No 
TestCompany, No 

を書くことにし、他の人が持っているので、欲しい新しいファイルにそのシナリオにそう

Asignee, ClientName, Lead 

Carl Jr, TestCompany, NO 
James, TestCompany, NO 
Sarah H, TestCompany, NO 
Osvaldo W, OtherCorp, Osvaldo W 
Walter Green, OtherCorp, No 
Ace Ven, PetDick, No 
Dan Marino, PetDick, No 

私はこの報告書には気にしない。

ファイルには、PERクライアント名と同じ数の行を割り当てることができます。 私がする必要があるのは、どのClientNamesにLeadがないかを知ることです。

は、ここで私がこれまで持っているものです:私は、出力の面で欲しいものを私に与えていない

import csv 

def createReport(): 
    with open('/home/origReport.csv', 'rt') as origfile, open('/home/newReport.csv', 'wt') as out: 
    reader = csv.DictReader(origfile) 
    writer = csv.writer(out, lineterminator='\n') 
    for row in reader: 
     if row['Lead'] == 'NO': 
     writer.writerow(row["Lead"]) 

createReport() 

を。

N,O 
N,O 
N,O 

これをスクリプトに入れてみてください。

writer.writerow(row["ClientName","Lead"]) 

私は

Traceback (most recent call last): 
File "test2.py", line 15, in <module> 
createReport() 
    File "test2.py", line 12, in createReport 
writer.writerow(row["ClientName","Lead"]) 
KeyError: ('ClientName', 'Lead') 

を取得しかし、また、私は何をif文に追加するを知りません。

本来、LeadがNOの各行を見つけたいだけですが、Leadが名前である別の行にClientNameが存在しない(または本質的には何もありませんが)必要があります。異なる行の同じClientNameに対してLeadがNOでない場合、このレポートではLeadを除外する必要があります。

ありがとうございました。

答えて

1

は配列を受け取り

writer.writerow([row["Lead"], row["ClientName"]]) 

writerowを試してみてください。入力row["Lead"]が暗黙的に["N", "O"]に変換されているため、最初の出力が得られます。

+0

ありがとう、これは適切な出力を得るために働いた。ロジックに関するアイディア。これを行う最も簡単な方法を見つけようとする。しかし、それは私に来ていない。 –

+0

簡単な方法は、ファイルを2回反復するか、またはファイルをオブジェクトに読み込んだ後、2回反復することです。最初の反復で、特定のclientNameが非NOリードの場合に記録するマップを作成し、2回目の反復でマップを使用してロジックを完成させます。 – yehe

+0

良い解決策のように聞こえる...地図を作る方法がわからない。今すぐグーグルで行っています –

関連する問題