python title 함수 - 존재하지 않을 수있는 파일을 삭제하는 가장 파이썬적인 방법





6 Answers

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

import contextlib

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

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

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

python

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

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

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




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

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



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

하나의 라이너입니다.

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




이 같은? 단락 회로 평가를 활용합니다. 파일이 존재하지 않으면 전체 조건부가 참일 수 없으므로 파이썬은 두 번째 부분을 평가하지 않습니다.

os.path.exists("gogogo.php") and os.remove("gogogo.php")



KISS 제공 :

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

그리고:

remove_if_exists("my.file")



나는 단지 shutil을 사용할 것이다.

import shutil shutil.rmtree(filename, ignore_errors=True)




Related


Tags

python