Попытка заменить оригинальный файл созданным временным файлом - PullRequest
0 голосов
/ 28 мая 2018

Я хочу сделать некоторые изменения в одном файле.Для этого я делаю временный файл, в который я записываю содержимое со всеми желаемыми изменениями, и в конце я пытаюсь заменить исходный файл этим временным.

Временный файл создан и выглядит так, как я ожидал,но операция замены не работает.

Это мой код, который не работает:

with tempfile.NamedTemporaryFile(mode='w', prefix=basename, dir=dirname, delete=False) as temp, open(file_path, 'r') as f:
    for line in f:
        temp.write(line + " test")
    os.replace(temp.name, file_path)

, но это дает мне ошибку:

PermissionError: [WinError 32] Процесс не может получить доступ к файлу, потому что он используется другим процессом

Неправильно ли мое использование функции замены?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Когда вы вызываете replace () внутри 'with', файл все еще открыт, поскольку вы все еще находитесь в области действия 'with'.

Как только вы вышли из 'with' файлабыл закрыт, и теперь вы можете заменить на os.replace ().

Попробуйте.

with tempfile.NamedTemporaryFile(mode='w', prefix=basename, dir=dirname, delete=False) as temp, open(file_path, 'r') as f:
    for line in f:
        temp.write(line + " test")
os.replace(temp.name, file_path)
0 голосов
/ 28 мая 2018

Ваша команда os.replace (temp.name, file_path) должна быть за пределами.

with tempfile.NamedTemporaryFile(mode='w', prefix=basename, dir=dirname, delete=False) as temp, open(file_path, 'r') as f:
    for line in f:
        temp.write(line + " test")
os.replace(temp.name, file_path)
...