根据用户输入的匹配对csv文件的值求和

时间:2017-11-29 20:05:10

标签: python python-3.x csv

问题描述

我有一个csv文件,其中有3位信息,如下所示,用逗号分隔。我有我的代码,如果我输入第一个完全相同的值,我现在会返回第二个和第三个值。

示例我输入的用户如果输入为25.803.1.1确实告诉我name = BALLOON并且连接等于357.我想做这个用户输入的工作25.803.1.1它会建议连接等于357,但是如果用户输入25.803。它会给匹配25.803的所有东西提供连接总和。如果用户输入25.它将给出以25开头的所有连接的总和。

所以我假设我需要一个if语句,可以查看是否有1个小数或2个小数位或3个小数位,然后打印出结果。我不确定是否最好进行某种分组,过滤或匹配,或者如果我需要创建一个新的列表,将十进制日期的第一位分成一个看起来像[[25]的列表, [803],[1],[1]]作为一个例子,然后尝试根据用户以某种方式输入的内容对其进行索引。非常感谢任何帮助。

当前代码,如果输入为25.803.1.1

,则有效
data_cumsum[4] - data_cumsum[2]

CSV文件

with open("D:/Python/Data/rttData.csv") as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')

    enbIDs = []
    enbNames = []
    enbRRCs = []

    for row in readCSV:
        enbID = row[0]
        enbName = row[1]
        enbRRC = row[2]

        enbNames.append(enbName)
        enbIDs.append(enbID)
        enbRRCs.append(enbRRC)

siteSelection = input('Enter the eNB number below to search for [ex: 25.803.1.1]')
enbIndex = enbIDs.index(siteSelection)
theName = enbNames[enbIndex]
theRRC = enbRRCs[enbIndex]
print('The name of site', siteSelection, 'is:', theName,'and the RRC Connections are:',theRRC)

1 个答案:

答案 0 :(得分:1)

您需要检查每条记录的ID才能看到它与您的查询存在部分匹配。以下解决方案通过使用startswith字符串方法来实现。可以实现更智能的部分匹配,但这可以让您走上正确的轨道。

#! /usr/bin/env python3
import collections
import csv
import itertools

Record = collections.namedtuple('Record', 'id, name, rrc')


def main():
    with open('rttData.csv', newline='') as file:
        records = tuple(itertools.starmap(Record, csv.reader(file)))
    query = input('Enter the ID to search for: ')
    for record in filter(lambda item: item.id.startswith(query), records):
        print(f'ID:   {record.id}\nName: {record.name}\nRRC:  {record.rrc}\n')


if __name__ == '__main__':
    main()