borrar archivo si existe; python

Quiero crear un archivo; Si ya existe quiero borrarlo y crearlo de nuevo. Intenté hacerlo así, pero arroja un error de Win32. ¿Qué estoy haciendo mal?

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

Está intentando eliminar un archivo abierto, y el estado de los documentos para os.remove()

En Windows, al intentar eliminar un archivo que está en uso, se genera una excepción

Podrías cambiar el código a …

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

… o puedes reemplazar todo eso con …

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

… lo que truncará el archivo a la longitud cero antes de abrirlo.

Está intentando eliminar el archivo mientras está abierto, ni siquiera necesita eso para eliminarlo:

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

Borra si existe

Puede usar abrir con el parámetro de modo = ‘w’. Si se omite el modo, el valor predeterminado es ‘r’.

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

w Truncar el archivo a longitud cero o crear un archivo de texto para escribir. La secuencia se coloca al principio del archivo.

Windows no le permitirá eliminar un archivo abierto (a menos que se abra con opciones de intercambio inusuales). Tendrá que cerrarlo antes de borrarlo:

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

Prueba esto:

  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 

editado

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