2017-10-10 44 views
1

我想在csv文件下面查找並從名爲'datatype'的字段中返回值,將映射,轉換和端口名作爲查找端口傳遞。使用python 3x查找csv文件

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

基本上,我想執行(Select datatype from csv_file where mapping=? and transformation=? and portname=?)

目前,我通過循環CSV文件中的每一行獲取的數據類型。有沒有簡單的和更好的方式來做到這一點。

下面是我使用的是當前的代碼。

  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

你可以有最好的辦法是csv.DictReader和他們某種TRANSF的ormation。

(Mapping, transformation, portname)是否唯一?

如果是這樣,你可以做類似這樣服用點:

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

是的我可以嘗試,但想知道如果我可以做到這一點與python內置軟件包和沒有循環。 – Leo

+0

對於數據可視化和操作,尤其是那些使用'csv'文件的人來說,'Pandas'比其他Python內置的包提供了很多優勢。 – user1190882

相關問題