2017-10-10 9 views
1

私はcsvファイルの下を検索し、ルックアップポートとしてマッピング、変換、およびポート名を渡す 'datatype'フィールドから値を返します。pythonを使用してcsvファイルを検索する

Mapping transformation portname datatype 
m_TEST_1 EXP_test_1  field_1  nstring 
m_TEST_1 EXP_test_1  field_2  date/time 

は基本的に、私はデータ型を取得するために、CSVファイルの各行をループしています、現在(Select datatype from csv_file where mapping=? and transformation=? and portname=?)

を実行したい。それを行うための任意の容易で、より良い方法はあります。

以下

は、私が使用している現在のコードである。

  lkp_file = csv.DictReader(open(lkpfile)) 
      for row in lkp_file: 
       if mapping.get('NAME')==row['Mapping']: 
        if frominstance==row['transformation']: 
         if fromfield==row['portname']: 
          fromdatatype=row['datatype'] 
          break 

答えて

1

あなたが持っている可能性が最善のアプローチは、TRANSFのいくつかの種類csv.DictReaderし、それらでありますオーマメーション。

(Mapping, transformation, portname)は一意ですか?

ので、あなたはこれに似たsomehtingを行うことができます場合は、次の

import csv 

d = {} 
with open("path-to.csv", "r") as f: 
    for row in csv.DictReader(f, delimiter=",")): 
     d[(row['Mapping'], row['transformation'], row['portname'])] = row['datatype'] 

あなたは、私がカンマを使用して、あなたが私たちを与えたテキストでそれらを持っていない私のexamplkeのように区切り文字を交換する必要があります。

+0

はい組み合わせがユニークです。 – Leo

1

なぜPandasを使用しないのですか?

CSVファイル: example.csv

Mapping,transformation,portname,datatype 
m_TEST_1,EXP_test_1,field_1,nstring 
m_TEST_1,EXP_test_1,field_2,date/time 

コード:

import pandas as pd 
df = pd.read_csv('example.csv') 
reqd_cols = df[(df.Mapping == 'm_TEST_1') & (df.transformation == 'EXP_test_1') & (df.portname == 'field_1')] 
print(reqd_cols) 

#  Mapping transformation portname datatype 
# 0 m_TEST_1  EXP_test_1 field_1 nstring 
+0

ええ、私はそれを試すことができますが、私はパッケージでビルドされ、ループなしでそれを行うことができますかと思っていた。 – Leo

+0

データ視覚化と操作、特に 'csv'ファイルを持つものでは、' Pandas'は他のPythonビルドパッケージよりも多くの利点をもたらします。 – user1190882

関連する問題