Я написал небольшую программу на Python в качестве персональной утилиты, чтобы помочь мне с рефакторингом. Он похож на unix replace, за исключением того, что поддерживает регулярные выражения и работает со всеми файлами в каталоге и (необязательно) со всеми подкаталогами.
Проблема в том, что я не заменяю на месте. Я открываю файлы, передаю содержимое в память, а затем перезаписываю файл следующим образом:
file = open('path/to/file','r')
in_string = file.read()
file.close()
# ...
#Processing logic
# ...
file = open('path/to/file','w')
file.write(out_string)
file.close()
Помимо очевидных проблем с производительностью и памятью, которые являются законными, но не настолько серьезными для моего использования, есть еще один недостаток этого метода. SVN волнуется. Я могу сделать некоторые обходные пути после факта, чтобы исправить ошибку контрольной суммы, которую svn генерирует при коммите, но это делает утилиту бессмысленной.
Есть ли лучший способ сделать это? Я предполагаю, что если бы я редактировал файл на месте, не было бы никаких проблем. Как мне это сделать?