Поскольку python отсчитывают от 0
при индексировании, вычитают 1
из выбора имен столбцов, таких как cols[2]
до cols[1]
для всех значений:
cols = df.columns
for row in df.itertuples():
with open(f'{row[1]}.xml', 'w') as f:
f.write(header.format(row[1]))
f.write(body.format(cols[1], row[2], cols[2],row[3],cols[3],row[4]))
<ORD>7283630</ORD>
<osi:ORDSTSINF types:STSCDE="1175">
<DTM>2019-12-04</DTM>
</osi:ORDSTSINF>
<osi:ORDSTSINF types:STSCDE="1304">
<DTM>2019-12-10</DTM>
</osi:ORDSTSINF>
<osi:ORDSTSINF types:STSCDE="1421">
<DTM>2019-12-12</DTM>
</osi:ORDSTSINF>
РЕДАКТИРОВАТЬ :
Больше динамических c решений с loop
:
header = """<ORD>{}</ORD>"""
body ="""
<osi:ORDSTSINF types:STSCDE="{}">
<DTM>{}</DTM>"""
cols = df.columns
for row in df.itertuples():
with open(f'{row[1]}.xml', 'w') as f:
f.write(header.format(row[1]))
for c, r in zip(row[2:], cols[1:]):
f.write(body.format(r, c))
EDIT1: для пропущенных значений добавьте notna
:
header = """<ORD>{}</ORD>"""
body ="""
<osi:ORDSTSINF types:STSCDE="{}">
<DTM>{}</DTM>"""
cols = df.columns
for row in df.itertuples():
with open(f'{row[1]}.xml', 'w') as f:
f.write(header.format(row[1]))
for c, r in zip(row[2:], cols[1:]):
if pd.notna(c):
f.write(body.format(r, c))