[Python] 존재하지 않을 수있는 파일을 삭제하는 가장 파이썬적인 방법


Answers

필자는 TOCTTOU 버그를 피하기 위해 파일의 존재 여부를 확인하기보다는 예외를 억제하는 것을 선호합니다. Matt의 대답은 이것의 좋은 예이지만 contextlib.suppress() 사용하여 Python 3에서 약간 단순화 할 수 있습니다.

import contextlib

with contextlib.suppress(FileNotFoundError):
    os.remove(filename)

filename 이 문자열 대신 pathlib.Path 객체 인 경우 .unlink() 를 사용하는 대신 .unlink() 메서드를 호출 할 수 있습니다. 필자의 경험에 따르면 Path 객체는 파일 시스템 조작을 위해 문자열보다 유용합니다.

이 답변의 모든 내용이 파이썬 3 전용이기 때문에 업그레이드해야 할 또 다른 이유가 있습니다.

Question

파일 filename 있으면 삭제하고 싶습니다. 말하기에 합당한가?

if os.path.exists(filename):
    os.remove(filename)

더 좋은 방법이 있습니까? 한 줄로?




존재하지 않는 파일을 강제로 삭제할 수있는 rm 을 사용하고 싶습니다.

rm --help | grep "force"
  -f, --force           ignore nonexistent files and arguments, never prompt
import os

os.environ['filename'] = filename;
os.system('rm -f $filename')



if os.path.exists(filename): os.remove(filename)

하나의 라이너입니다.

많은 사람들이 동의하지 않을 수 있습니다 - 아마도 삼중의 사용을 "추악한"것으로 생각하는 것과 같은 이유에서 - 그러나 이것은 표준이 아닌 "추악한"것을 부를 때 추악한 표준에 익숙한 사람들의 말을 들어야하는지에 대한 질문을 야기합니다.




Matt의 답변은 구형 파이톤 스에 적합한 답변이고, 케빈은 최신 답변입니다.

silentremove 함수를 복사하지 않으려면이 기능이 path.pyremove_p :로 표시됩니다.

from path import Path
Path(filename).remove_p()



앤디 존스 (Andy Jones)의 답변에 따르면 진정한 삼자법은 어떨까요?

os.remove(fn) if os.path.exists(fn) else None



os.remove는 잘 작동해야합니다.

import os
Input = input('File:')
File = Input.get()
try:
  os.remove(File)
except:
  none