Denna gången sitter jag med ett urläsningsproblem på jobbet, där jag sitter nu är att elemtree fullständigt vägrar att läsa ur negativa värde, detta är konsekvent.
Python: 3,11 64b
Win 10.
VScode.
Första funktionen är att skapa "root" för aml-filen.
Kod: Markera allt
def xml_parser():
tree = ET.parse(r'sökväg\till\test_data_full.xml')
root = tree.getroot()
return root
Kod: Markera allt
def aql_validation() -> None:
row = 1
root = xml_parser()
cog_find = root.findall('.//Test[@TestID="4;1"]')
mmi_find = root.findall('.//Test[@TestID="5;1"]')
dlx_mid_find = root.findall('.//Test[@TestID="3;7"]')
for aql_iter, cog, mmi_iter, dlx_mid_iter in zip_longest(aql_test, cog_find, mmi_find, dlx_mid_find):
av = aql_iter.get('AQL').lower()
if cog is not None:
cog_collect = cog.attrib['Value'].strip("'[]").replace(',','.')
else:
cog_collect = None
if mmi_iter is not None:
mmi_collect = mmi_iter.attrib['Value'].strip("'[]").replace(',','.')
else:
mmi_collect = None
if dlx_mid_iter is not None:
dlx_mid_collect = dlx_mid_iter.attrib['Value'].strip("'[]")#.replace(',','.')
else:
dlx_mid_collect = None
if av == "true":
if cog_collect is not None:
worksheet.write_number(f'B{row}', float(cog_collect), None)
if mmi_collect is not None:
worksheet.write(f'C{row}', float(mmi_collect), None)
if dlx_mid_collect is not None:
worksheet.write(f'E{row}', float(dlx_mid_collect), None)
if av == "false":
if cog_collect is not None:
try:
worksheet.write(f'B{row}', float(cog_collect), None)
except ValueError as ver:
pass
if mmi_collect is not None:
try:
worksheet.write(f'C{row}', float(mmi_collect), None)
except ValueError as ver:
pass
#print("AQL False", (cog_parse()))
falsk +=1
row += 1
# Non AQL kör utan detta.cog_parse()
workbook.close() -> DENNA ÖPPNAS UTANFÖR FUNKTIONEN. Data skrivs till den.
Ett utdrag ur XML-data.
Kod: Markera allt
AQL TRUE
<?xml version="1.0" encoding="utf-8"?>
<Tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TestProgram TestTime="36" AQL="true"">
<Test Type="DLX" TestID="3;7" Result="true" Value="-48" Min="-999" Max="-43" TestCnt="1" />
<Test Type="COG" TestID="4;1" Result="true" Value="10,6" Min="6" Max="999" TestCnt="1" />
<Test Type="MMI" TestID="5;1" Result="true" Value="56,55" Min="50" Max="999" TestCnt="1" />
</TestProgram>
AQL FALSE
<TestProgram TestTime="5" AQL="false" ">
<Test Type="COG" TestID="4;1" Result="true" Value="10,4" Min="6" Max="999" TestCnt="1" />
<Test Type="MMI" TestID="5;1" Result="true" Value="67,00" Min="50" Max="999" TestCnt="1" />
</TestProgram>
</Tests>
Jag har dubbelkollat i excelfilen att det "bör" vara på samma plats. Det är konsekvent att den inte läser ur detta.
COG och MMI återkommer hela tiden när jag jämför mot XML-filen men aldrig DLX värdet till trots att jag läser på samma sätt varje gång.
Var är det jag missar något fundamentalt?
Jag har en version 1.0 av detta program vilket använder regex i stället och den fungerar utmärkt tills dess någon ansåg att vi skall göra som "datastrukturen" i databasen.
Tänkte att då är nog elemtree ett bättre val och borde vara mer stabilt, men nu har jag fastnat totalt här, i excelfilen har jag 1500 rader med data men inga negativa värden, enbart COG och MMI, det är sex värden som fattas med jämna mellanrumm.
Kör en print på vilken del den går in i på aql true falls, med resultatet
Antal: AQL 18
Antal: !AQL 1584
Vilket stämmer med verkligheten (det är en liten fil) då AQL-true är ungefär var 100 beroende p åhur testen har gått.