Проблема в том, как Python использует соответствующее WinAPI для работы с файлами. При вызове
open()
с режимом
w вызывается
CreateFile с параметром
dwDesiredAccess равным
GENERIC_WRITE и параметром
dwCreationDisposition равным
CREATE_ALWAYS. Вот что написано в документации по поводу сочетания этих параметров при открытии файла с атрибутом "скрытый":
If CREATE_ALWAYS and FILE_ATTRIBUTE_NORMAL are specified, CreateFile fails and sets the last error to ERROR_ACCESS_DENIED if the file exists and has the FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM attribute. To avoid the error, specify the same attributes as the existing file.
Если на русском и кратко, то WinAPI-функция
CreateFile вернёт ошибку
ERROR_ACCESS_DENIED. А python-функция
open()
выбросит соответствующее исключение.
Нормального решения этой проблемы не существует. Обходным решением может быть использование режима
r+:
with open('test.txt', 'r+') as fh:
fh.truncate()
fh.write('test')