os.remove() в окнах дает "[Ошибка 32] используется другим процессом"
Я знаю, что этот вопрос задавался прежде, чем успокоиться на SO и в других местах. Я все еще не мог сделать это. И мне жаль, если мой английский плох
Удаление файла в Linux было намного проще. Просто os.remove(my_file)
сделал работу, но в windows это дает
os.remove(my_file)
WindowsError: [Error 32] The process cannot access the file because it is being used by another process: (file-name)
мой код:
line_count = open(my_file, mode='r') #
t_lines = len(line_count.readlines()) # For total no of lines
outfile = open(dec_file, mode='w')
with open(my_file, mode='r') as contents:
p_line = 1
line_infile = contents.readline()[4:]
while line_infile:
dec_of_line = baseconvert(line_infile.rstrip(),base16,base10)
if p_line == t_lines:
dec_of_line += str(len(line_infile)).zfill(2)
outfile.write(dec_of_line + "\r\n")
else:
outfile.write(dec_of_line + "\r\n")
p_line += 1
line_infile = contents.readline()[4:]
outfile.close()
os.remove(my_file)
Вот my_file
переменная, которая содержит полную структуру пути файла. Как мудрый dec_file
также содержит путь, но к новому файлу. И файл, который я пытаюсь удалить, это файл, который используется под read mode
, Нужна помощь, пожалуйста.
моя попытка:
- Пробовал закрывать файл
my_file.close()
, Соответствующая ошибка, которую я получил, былаAttributeError: 'str' object has no attribute 'close'
, Я знал, когда файл находится вread mode
он автоматически закрывается, когда доходит до конца файла. Но все же я попробовал - Также попробовал
os.close(my_file)
согласно /questions/10585211/pochemu-windowserror-pri-udalenii-vremennogo-fajla/10585228#10585228. я получил ошибку какTypeError: an integer is required
- Или я получаю эту ошибку только потому, что я открыл файл дважды (для подсчета строки и для чтения содержимого файла),..?
1 ответ
Pythonic способ чтения или записи в файл с помощью with
контекст.
Чтобы прочитать файл:
with open("/path/to/file") as f:
contents = f.read()
#Inside the block, the file is still open
# Outside `with` here, f.close() is automatically called.
Написать:
with open("/path/to/file", "w") as f:
print>>f, "Goodbye world"
# Outside `with` here, f.close() is automatically called.
Теперь, если нет другого процесса чтения или записи в файл и при условии, что у вас есть все разрешения, вы сможете закрыть файл. Существует очень хороший шанс, что есть утечка ресурсов (дескриптор файла не закрывается), из-за которого Windows не позволит вам удалить файл. Решение заключается в использовании with
,
Далее, чтобы уточнить еще несколько моментов:
- Это сборщик мусора, который вызывает закрытие потока при уничтожении объекта. Файл не закрывается автоматически после завершения чтения. Это не имело бы смысла, если бы программист хотел перемотать назад, не так ли?
- os.close (..) внутренне вызывает C-API
close(..)
это берет целочисленный файловый дескриптор. Не строка, как вы прошли.