おそらく、サプライヤデータをクラスにカプセル化します。
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は、おそらくここで最善の策だと思います(データの解析方法に関係なく)。