我有一个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]]作为一个例子,然后尝试根据用户以某种方式输入的内容对其进行索引。非常感谢任何帮助。
data_cumsum[4] - data_cumsum[2]
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)
答案 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()