我可能会将供应商数据封装在一个类中:
class Supplier(object):
def __init__(self):
self.projects = [] #winning projects
self.bids = [] #how much this supplier bid, winning bid.
然后我将每个数据文件分别解析为:
from collections import defaultdict
def parse_datafile(fname,output=None):
if output is None:
output = defaultdict(Supplier)
with open(fname,r) as f:
project = f.readline().split(':')[1].strip()
suppliers = map(str.strip,f.readline().split(',')[:-2])
bids = map(str.strip,f.readline().split(','))
winner = bids[-1]
win_amt = bids[-2]
for s,b in zip(suppliers,bids):
output[s].bids.append(int(b),int(win_amt))
output[winner].projects.append(project)
return output
现在我们可以建立我们的字典:
import glob
from Collections import defaultdict
d = defaultdict(Supplier)
for fname in glob.iglob('*.txt'):
d = parse_datafile(fname,output=d)
您可以通过以下方式获取有关该供应商的信息:
print d['supplier A'].projects
print [ float(bid)/winbid for bid,winbid in d['supplier A'].bids ]
等等
当然,有一些库可以.xls
直接在 python 中解析文件,这可能比我的手动解析函数更合适。但我仍然认为包含所有相关信息的类的 defaultdict 可能是你最好的选择(不管你如何设法解析数据)。