完整代码在末尾。你知道吗
我写了一个程序,从csv文件中读取数据。它创建了一个名为“Facility”的变量类。每个设施可以有多个水源,因此还有另一个类称为“WaterSource”,它将单个水源的属性列表附加到每个设施中。如果我打电话:
data['00312']
我得到输出:
Facility 00312 US Aggregates Inc IN
如果我要求data['00312'].records
:
[ WaterSource 00312 WELL Willshire 80 683175 4511625,
WaterSource 00312 WELL Willshire 80 682550 4511750,
WaterSource 00312 INTAKE Willshire 1200 Unnamed Quarry 683225 4512075,
WaterSource 00312 INTAKE Willshire 1200 Unnamed Quarry 683225 4512050]
我需要创建一个报告,该报告迭代类中的每个变量,并返回具有多个水源的设施列表。因此,最终输出将是一个[RegNo,设施名称,水源编号]列表,例如:
【设施00312美国骨料公司4】
我遇到的问题是理解如何遍历设施来计算附加到每个设施对象的水源的记录。我想我可以在某个地方给类添加一个方法,但我不太清楚在哪里。我是一个python初学者,所以请原谅我,如果这是不太正确的词汇。我甚至不知道从哪里开始,所以你能提供的任何建议都会很有帮助。你知道吗
class Facilities:
def __init__(self, regno, name, mwu): ##creates facility attributes
self.regno = regno
self.name = name
self.mwu = mwu
self.records = []
def add_record(self,record):
self.records.append(record)
def __repr__(self):
'''Makes a string representation'''
return 'Facility {0} {1} {2}'.format(self.regno, self.name, self.mwu)
class WaterSource(Facility):
'''holds info about the water source'''
def __init__(self, regno, source, quad, cap, body, utmE, utmN): ##creates water source attributes
self.regno = regno
self.source = source
self.quad = quad
self.cap = cap
self.body = body
self.utmE = utmE
self.utmN = utmN
self.records = []
def source_data(self):
regnos = []
sources = []
quads = []
caps = []
bodies = []
utmEs = []
utmNs = []
for record in self.records:
regnos.append(record.regno)
sources.append(record.source)
quads.append(record.quad)
caps.append(record.cap)
bodies.append(record.body)
utmEs.append(record.utmE)
utmNs.append(record.utmN)
return (regnos,sources,quads,caps,bodies,utmEs,utmNs)
def __repr__(self):
return ' WaterSource {0} {1} {2} {3} {4} {5} {6}'.format(self.regno, \
self.source, self.quad, self.cap, self.body, self.utmE, self.utmN)
def read_data(filename):
rv = {}
for r in csv.DictReader(open(filename, 'r', encoding='UTF-8')):
regno = r['RegNo']
if r['RegNo'] not in rv:
rv[regno] = Facilities(r['RegNo'],r['Facility'], r['MWU Code'])
rv[regno].add_record(WaterSource(regno, r['Source Code'], r['Quadrangle'], \
r['Capacity (GPM)'], r['Water Body Name'], r['UTM East'], r['UTM North']))
return rv
data = read_data('Fac-2013-2016.csv')
所有的工具都以值的形式存储在字典
data
中,使用工具的RegNo作为键。可以使用dictionary items method遍历所有数据。每个设施的records
属性的长度是水源的数量。您可以构建一个格式字符串来使用所需的信息。你知道吗根据我的理解,只需添加一个方法并返回一个对象计数,或者使用len直接向上计数记录,除非您要求的内容有更多内容?你知道吗
相关问题 更多 >
编程相关推荐