удаление файла, если он существует; python

Я хочу создать файл, если он уже существует, я хочу его удалить и создать его заново. Я попытался сделать это так, но он выдает ошибку Win32. Что я делаю не так?

try:
    with open(os.path.expanduser('~') + 'Desktopinput.txt'):
        os.remove(os.path.expanduser('~') + 'Desktopinput.txt')
        f1 = open(os.path.expanduser('~') + 'Desktopinput.txt', 'a')
except IOError:
    f1 = open(os.path.expanduser('~') + 'Desktopinput.txt', 'a')

5 ответов


вы пытаетесь удалить открытый файл, и документы для os.remove() государство...

в Windows при попытке удалить используемый файл возникает исключение

вы можете изменить код на...

filename = os.path.expanduser('~') + '\Desktop\input.txt'
try:
    os.remove(filename)
except OSError:
    pass
f1 = open(filename, 'a')

...или вы можете заменить все это...

f1 = open(os.path.expanduser('~') + '\Desktop\input.txt', 'w')

...который будет обрезать файл до нулевой длины перед открытием.


вы можете использовать open с параметром mode = 'w'. Если mode опущен, по умолчанию используется значение 'r'.

with open(os.path.expanduser('~') + '\Desktop\input.txt', 'w')

w усечь файл до нулевой длины или создать текстовый файл для записи. Поток располагается в начале файла.


вы пытаетесь удалить файл в то время как он открыт, вам даже не нужно, что with есть, чтобы удалить его:

path = os.path.join(os.path.expanduser('~'), 'Desktop/input.txt')
with open(path, 'w'): as f:
    # do stuff

удаляет, если он существует


Windows не позволит вам удалить открытый файл (если он не открыт с необычными параметрами совместного доступа). Вам нужно будет закрыть его перед удалением:

try:
    with open(os.path.expanduser('~') + '\Desktop\input.txt') as existing_file:
        existing_file.close()
        os.remove(os.path.expanduser('~') + '\Desktop\input.txt')

попробуйте это:

 from os import path, 
    PATH = os.path.expanduser('~') + '\Desktop\input.txt'
    if path.isfile(PATH):
       try:
          os.remove(os.path.expanduser('~') + '\Desktop\input.txt')
       except OSError:
          pass

редактировать :

from os import path, 
        PATH = os.path.expanduser('~') + '\Desktop\input.txt'
        try:
            os.remove(os.path.expanduser('~') + '\Desktop\input.txt')
        except OSError:
            pass