Я хочу, чтобы разобрать файл YAML, имеющий следующую структуру данных:"TypeError: индексы списка должны быть целыми, а не str": yaml.load_all?
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
Я следующий код, но я с «TypeError: список индексов должны быть целыми, не StR» в строке 20:
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.
Что мне не хватает?
Может предоставить полный отклик, пожалуйста. Вы можете изменить свой вопрос, чтобы добавить его. – SiHa
Прочтите и следуйте рекомендациям [PEP-0008] (https://www.python.org/dev/peps/pep-0008/). –