使用python 3x查找csv文件

时间:2017-10-10 08:55:24

标签: python python-3.x

我想查找下面的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

2 个答案:

答案 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