【发布时间】:2015-07-14 14:36:46
【问题描述】:
我要解析具有以下数据结构的 YAML 文件:
Version: 1
TxnCode: MPT
MessageID: "FFH-18544-1388620740-795905"
Recommendations:
- {ReqSegFlightRef: [[1,2]],TotalPriceRef: 1,PriceInfoRef: 1}
- {ReqSegFlightRef: [[3,4,2]],TotalPriceRef: 2,PriceInfoRef: 2}
- {ReqSegFlightRef: [[5,4,2]],TotalPriceRef: 3,PriceInfoRef: 3}
Flights:
- {OpCarrier: SN,MktCarrier: SN,FlightNb: 2902,DptDate: "0109",DptTime: "09:30",ArrTime: "11:05",DptAirport: VIE,ArrAirport: BRU}
- {OpCarrier: SN,MktCarrier: SN,FlightNb: 243,DptDate: "0109",DptTime: "12:15",ArrTime: "17:00",DptAirport: BRU,ArrAirport: FNA}
- {OpCarrier: OS,MktCarrier: LH,FlightNb: 6325,DptDate: "0109",DptTime: "06:30",ArrTime: "07:35",DptAirport: VIE,ArrAirport: MUC}
Prices:
- {TotalPrice: 1574.14,BaseAmount: 1368.00,TotalTaxe: 206.14,TotalSurcharge: 0.00,TotalFee: 0.00}
- {TotalPrice: 1633.57,BaseAmount: 1368.00,TotalTaxe: 265.57,TotalSurcharge: 0.00,TotalFee: 0.00}
- {TotalPrice: 1636.57,BaseAmount: 1368.00,TotalTaxe: 268.57,TotalSurcharge: 0.00,TotalFee: 0.00}
LFSDetails: |
PriceInfos:
- {FaresRef: [1,2],Price: {Total: 1574.14},Amount: {Total: 1368.00},Taxes: {Total: 206.14},Surcharges: {Total: 0.00},Fees: {Total: 0.00}}
- {FaresRef: [3,4,2],Price: {Total: 1633.57},Amount: {Total: 1368.00},Taxes: {Total: 265.57},Surcharges: {Total: 0.00},Fees: {Total: 0.00}}
- {FaresRef: [3,4,2],Price: {Total: 1636.57},Amount: {Total: 1368.00},Taxes: {Total: 268.57},Surcharges: {Total: 0.00},Fees: {Total: 0.00}}
ListCabinRequested: []
FareInfo:
- {RBD: M,FareBasis: BFFOWAT,PTC: ADT,BreakPointId: N,Availability: 9,Cabin: W,FareType: OB}
- {RBD: B,FareBasis: BFFOWAT,PTC: ADT,BreakPointId: Y,Availability: 9,Cabin: W,FareType: OB}
- {RBD: B,FareBasis: BFFOWAT,PTC: ADT,BreakPointId: N,Availability: 9,Cabin: M,FareType: OB}
Currency: EUR
我有以下代码,但在第 20 行出现“TypeError:列表索引必须是整数,而不是 str”:
def yaml_load_all(iStream,iCodeFilter=None):
for ayamldoc in yaml.load_all(iStream):
lfsWrapper = LFSWrapper(iCodeFilter)
lfsDetails = ayamldoc['LFSDetails'] #line 20
if lfsDetails is not None:
ayamldoc['LFSDetails'] = yaml.load(lfsDetails)
lfsWrapper.loadDict(ayamldoc)
if lfsWrapper.isValid():
yield lfsWrapper
(我稍后会调用此方法,将 iStream 设置为 sys.stdin 以读取数据文件)。
我认为我在这里缺少一些关于数据结构或 yaml.load_all 工作方式的基本内容。
我错过了什么?
【问题讨论】:
-
请提供完整的 Traceback。您可以编辑您的问题以添加它。
-
请阅读并遵守PEP-0008 指南。