我想查找下面的csv文件,并从名为'datatype'的字段返回值,将映射,转换和portname作为查找端口传递。
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
答案 0 :(得分:1)
您可能拥有的最佳方法是csv.DictReader
并进行某种转换。
(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']
你必须交换分隔符,就像在我的例子中一样,我使用逗号,而你在给我们的文本中没有它们。
答案 1 :(得分: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