Aug-10-2018, 08:07 PM
from collections import namedtuple def parse(line): Field = namedtuple('Field', field_names=('name', 'start', 'length')) mapping = {'000A':(Field('REC_CNTR', 0, 5), Field('REC_TYPE', 5, 4), Field('DATETIME', 9, 14), Field('NAME', 23, 14), Field('AMOUNT', 37, 8), Field('ADDRESS_LINE_1', 45, 75)), '000B':(Field('REC_CNTR', 0, 5), Field('REC_TYPE', 5, 4), Field('BILL_NO', 9, 14), Field('BILL_TAX', 23, 8), Field('BILL_DUE_DATE', 31, 14))} rec_type = line[5:9] # rec_field_names = (fld.name for fld in mapping[rec_type]) # Record = namedtuple("Record", field_names=rec_field_names) # return Record(**{fld.name:line[fld.start:fld.start+fld.length] for fld in mapping[rec_type]}) return {fld.name:line[fld.start:fld.start+fld.length] for fld in mapping[rec_type]} # Sample Test Data sample_lines = ["00001000A20181022342320Mr.ABC DEF VAL 234.34ADDRESS LINE1", "00002000BISSNO-CF123 0023.3420180722", "00003000BISSNO-CF124 12327.3420180810"] data = [parse(line) for line in sample_lines] for rec in data: print(rec)this will output
Output:{'AMOUNT': ' 234.34', 'REC_CNTR': '00001', 'DATETIME': '20181022342320', 'ADDRESS_LINE_1': 'ADDRESS LINE1', 'NAME': 'Mr.ABC DEF VAL', 'REC_TYPE': '000A'}
{'BILL_NO': 'ISSNO-CF123 ', 'BILL_DUE_DATE': '20180722', 'BILL_TAX': ' 0023.34', 'REC_CNTR': '00002', 'REC_TYPE': '000B'}
{'BILL_NO': 'ISSNO-CF124 ', 'BILL_DUE_DATE': '20180810', 'BILL_TAX': '12327.34', 'REC_CNTR': '00003', 'REC_TYPE': '000B'}
if you uncomment lines #11-#13 and comment out line#14 you will go one step further and use namedtuple also for record, not only fieldsOutput:Record(REC_CNTR='00001', REC_TYPE='000A', DATETIME='20181022342320', NAME='Mr.ABC DEF VAL', AMOUNT=' 234.34', ADDRESS_LINE_1='ADDRESS LINE1')
Record(REC_CNTR='00002', REC_TYPE='000B', BILL_NO='ISSNO-CF123 ', BILL_TAX=' 0023.34', BILL_DUE_DATE='20180722')
Record(REC_CNTR='00003', REC_TYPE='000B', BILL_NO='ISSNO-CF124 ', BILL_TAX='12327.34', BILL_DUE_DATE='20180810')
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs