bestand verwijderen als het bestaat; python

Ik wil een bestand maken; als het al bestaat, wil ik het verwijderen en opnieuw maken. Ik heb het op deze manier geprobeerd, maar het geeft een Win32-fout. Wat doe ik verkeerd?

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')

Antwoord 1, autoriteit 100%

Je probeert een geopend bestand en de documenten voor os.remove()staat…

Als u in Windows probeert een bestand te verwijderen dat in gebruik is, wordt er een uitzondering gegenereerd

Je zou de code kunnen veranderen in…

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

…of je kunt dat allemaal vervangen door…

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

…waardoor het bestand wordt afgekapt tot de lengte nul voordat het wordt geopend.


Antwoord 2, autoriteit 8%

Je probeert het bestand te verwijderen terwijl het open is, je hebt die withdaar niet eens nodig om het te verwijderen:

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

Verwijdert als het bestaat


Antwoord 3, autoriteit 5%

Je kunt open met mode parameter = ‘w’ gebruiken. Als de modus wordt weggelaten, wordt deze standaard ingesteld op ‘r’.

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

wBestand inkorten tot een lengte van nul of een tekstbestand maken om te schrijven.
De stream staat aan het begin van het bestand.


Antwoord 4, autoriteit 3%

Windows staat niet toe dat je een geopend bestand verwijdert (tenzij het is geopend met ongebruikelijke opties voor delen). Je moet het sluiten voordat je het verwijdert:

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

Antwoord 5, autoriteit 3%

Probeer dit:

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

bewerkt:

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

Other episodes