2013-04-23 16 views
7

Chcę utworzyć plik; jeśli już istnieje, chcę go usunąć i utworzyć od nowa. Próbowałem zrobić to tak, ale rzuca błąd Win32. Co ja robię źle?usuwanie pliku, jeśli istnieje; python

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

Odpowiedz

14

starasz Aby usunąć otwarty plik, a dokumenty dla stanu os.remove() stan ...

W systemie Windows próba usunięcia pliku, który jest w użyciu, powoduje wyjątek zostać podniesiony

można zmienić kod do ...

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

... czy można zastąpić wszystko z ...

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

... co będzie skrócić plik do zerowej długości przed otwarciem.

+2

To jest potencjalny wyścig, sprawdź 'os.path.exists' zanim go usuniesz, czyli – jamylak

+0

Inny program może działać na pliku i usuwa go zaraz po 'os.path.exists' oznacza" True ". – jamylak

+0

@jamylak Co powiesz teraz? – Aya

1

Windows nie pozwoli usunąć otwartego pliku (chyba że jest otwarty z nietypowych opcji udostępniania). Musisz go zamknąć przed usunięciem:

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

Możesz użyć parametru open z mode = 'w'. Jeśli tryb jest pominięty, domyślnie jest to "r".

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

w Obetnij plik do zerowej długości lub utworzyć plik tekstowy na piśmie. Strumień znajduje się na początku pliku.

+0

tak, ale chcę dołączyć ciągi później – Yui

+0

@Yui Nie rozumiem, mówiłeś, że chcesz go usunąć, jeśli istnieje ... Proszę zaktualizować pytanie bez żadnych załączników. – jamylak

+0

Tak Chcę usunąć, jeśli już istnieje przed uruchomieniem skryptu. Po stworzeniu go od nowa mam wiele ciągów dołączonych do nowego pliku – Yui

1

Próbujesz usunąć plik, gdy jest on otwarty, nie trzeba nawet że with tam, aby go usunąć:

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

Usuwa jeśli istnieje

1

Spróbuj tego:

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 

edycja:

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

potencjalny stan wyścigu tutaj również – jamylak

+0

@jamylak masz rację, zredagowałem moją odpowiedź. –

+0

Nie ma teraz wyścigu, ale "ścieżka".isfile (PATH) 'stała się efektywna redundantnie – jamylak

Powiązane problemy