Возможно, вы захотите попробовать использовать метод write напрямую с дескриптором файла, а не вызывать tostring. Измените эту строку:
f.write(etree.tostring(tree,pretty_print=True))
к этому:
tree.write(f, pretty_print=True)
Надеемся, это уменьшит использование памяти вдвое.