Mantenha os namespaces existentes ao substituir o arquivo XML com ElementTree e Python

Eu tenho um arquivo XML no seguinte formato

<?xml version="1.0" encoding="utf-8"?>
<foo>
   <bar>
      <bat>1</bat>
   </bar>
   <a>
      <b xmlns="urn:schemas-microsoft-com:asm.v1">
         <c>1</c>
      </b>
   </a>
</foo>

Quero alterar o valor de bat para '2' e alterar o arquivo para este:

<?xml version="1.0" encoding="utf-8"?>
<foo>
   <bar>
      <bat>2</bat>
   </bar>
   <a>
      <b xmlns="urn:schemas-microsoft-com:asm.v1">
         <c>1</c>
      </b>
   </a>
</foo>

Eu abro este arquivo fazendo isso

tree = ET.parse(filePath)
root = tree.getroot()

Depois, altero o valor de bat para '2' e salve o arquivo assim:

tree.write(filePath, "utf-8", True, None, "xml")

O valor de bat muda com sucesso para 2, mas o arquivo XML agora se parece com isso.

<?xml version="1.0" encoding="utf-8"?>
<foo xmlns:ns0="urn:schemas-microsoft-com:asm.v1">
   <bar>
      <bat>2</bat>
   </bar>
   <a>
      <ns0:b>
         <ns0:c>1</ns0:c>
      </ns0:b>
   </a>
</foo>

Para corrigir o problema de ter um espaço para nome chamado ns0, faça o seguinte antes de analisar o documento

ET.register_namespace('', "urn:schemas-microsoft-com:asm.v1")

Isso elimina o namespace ns0, mas o arquivo xml agora se parece com isso

<?xml version="1.0" encoding="utf-8"?>
<foo xmlns="urn:schemas-microsoft-com:asm.v1">
   <bar>
      <bat>2</bat>
   </bar>
   <a>
      <b>
         <c>1</c>
      </b>
   </a>
</foo>

O que faço para obter a saída necessária?

questionAnswers(0)

yourAnswerToTheQuestion