2017-01-12 19 views
0

私は2つのcsvファイルを比較し、それらを検索して特定の値を見つけようとしています。以下の例。Python:2つのCSVリストを比較する


FILE ONE

のFirstName、LastNameの、年齢

ジョン、ドウ、45

ジェーン、ドウ、34

ロバート、スマイト、27

ボブ、White、56

ケーリー、ウッズ、28


FILE TWO

ロバート

ジェーン


スクリプトファイルの1のを検索し、ファイル二つのFirstNameの列を使用する必要がありますFirstName列と年齢を返しますマイコードのみロバートを出力34

結果 ロバート、27 ジェーン、27それはジェーンの二行を探し続けていません。私は成功していないWhileループを使ってみました。どんな援助も大歓迎です!ありがとう!

今年は、10k行以上のファイルで50個以上のアイテムを検索しています。以下は

コード:

import csv 

FileOne = open('/FileOne') 
FileOneReader = csv.DictReader(FileOne) 

FileTwo = open('/FileTwo') 
FileTwoReader = csv.DictReader(FileTwo) 


for row in FileTwoReader: 
    for row2 in FileOneReader: 
     if row['FirstName'].lower() in row2['FirstName'].lower(): 
      print 'Name:' + row['FirstName'] + ' Age: ' + row2['Age'].lower() 
+1

理由があります。あなたのファイルの1つは、2回目の繰り返しで使い果たされます。リストにデータを保存し、そのようにチェックする必要があります。 – Abdou

+0

CSVファイルが不審です。 [CSV形式の定義](https://tools.ietf.org/html/rfc4180#section-2)を参照してください。 row2 ['FirstName']。lower(): 'これに'行['FirstName']。lower()== row2 ['FirstName']の場合は、この '' FirstName ' .lower(): 'あなたのデータを整理した直後。 –

答えて

0

最初の反復で(iteratorある)全体csv.DictReaderオブジェクトを読んでいるので、第二の一方が印刷されていない理由です。 2回目の反復では、iteratorsのいずれかが使い果たされているため、何も返されません。

リストにデータを保存し、そのようにチェックする必要があります。

# Use with statements whenever you're working with more than one file 
with open('full_names.csv') as fileone, open('first_names.csv') as filetwo: 
    full_table = list(csv.DictReader(fileone)) 
    small_table = list(csv.DictReader(filetwo)) 
    for row1 in full_table: 
     for row2 in small_table: 
      if row2['FirstName'].lower() == row1['FirstName'].lower(): 
       print('Name: ' + row2['FirstName'] + ', Age: '+ row1['Age'].lower()) 

これは得られるはず:

# Name: Jane, Age: 34 
# Name: Robert, Age: 27 

full_namesをここでガイドです。CSVは含まれています

FirstName,LastName,Age 
John,Doe,45 
Jane,Doe,34 
Robert,Smite,27 
Bob,White,56 
Cary,Woods,28 

first_names.csvは含まれています。あなたが最初の繰り返しで全体 `csv.DictReader`オブジェクトを読んでいるため、2番目の1が印刷されていない

FirstName 
Robert 
Jane 
+0

これは私のために働いたが、if文の '=='を 'in'に変更しなければならなかった。ありがとう! – marksman

1

これはパンダと非常に簡単です!

pandasで両方のcsvファイルをインポートし、2番目のcsvを最初のものとマージして、目的の変数を選択します。

import pandas as pd 
df1 = pd.DataFrame([['A', 'LastA', 30], ['B', 'LastB', 20], ['C', 'LastB', 10]], 
        columns=['FirstName', 'LastName', 'Age']) 
df2 = pd.DataFrame([['A'], ['B']], 
        columns=['FirstName']) 

df2.merge(df1, on='FirstName')[['FirstName', 'Age']] 

## -- End pasted text -- 
Out[7]: 
    FirstName Age 
0   A 30 
1   B 20 
+0

ありがとうございます。私はパンダについてもっと学びます。 – marksman

0

Mayebこのようなものですか?

import csv 

FileOne = open('/FileOne') 
FileOneReader = csv.DictReader(FileOne) 

FileTwo = open('/FileTwo') 
FileTwoReader = csv.DictReader(FileTwo) 

names_to_check = [] 

for row in FileTwoReader: 
    names_to_check.append(row['FirstName'].lower()) 

for row in FileOneReader: 
    if row['FirstName'].lower() in names_to_check: 
     print "Name: {} Age: {}".format(row['FirstName'], row['Age']) 
+1

助けてくれてありがとう! – marksman

関連する問題