programing

대부분의 거대한 방법은 존재하지 않을지도 모른 파일을 삭제합니다.

firstcheck 2022. 9. 26. 21:52
반응형

대부분의 거대한 방법은 존재하지 않을지도 모른 파일을 삭제합니다.

나는 파일을 삭제하고 싶다.filename만약 그것은 존재한다.그것을 말하는 게 적절할까.

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

있나 더 좋은 방법?A1행?

보다 거대한 방법: 것이다.

try:
    os.remove(filename)
except OSError:
    pass

비록 이고 매우 못생긴 것 심지어 더 많은 라인이 걸린다, 불필요한 전화를 피할 수 있습니다.os.path.exists()그리고 남용하는 예외의어서 이무기를 규칙을 따른다.

그것은 당신을 위해 이런 일을 하는 기능을 쓸:가치가 있을 수 있다.

import os, errno

def silentremove(filename):
    try:
        os.remove(filename)
    except OSError as e: # this would be "except OSError, e:" before Python 2.6
        if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory
            raise # re-raise exception if a different error occurred

나는 차라리 파일의 존재에 대해 TOCTTOU 벌레를 피하기 위해를 확인하는 것 예외를 억압하는 것을 선호한다.이 매트의 대답은 좋은 예시이지만, 우리가 약간 파이썬 3항, contextlib을 이용하여 간결하게 할 수 있다.suppress():

import contextlib

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

한다면filenamepathlib.Path문자열 대신 오브젝트를 호출할 수 있습니다.os.remove(). 내 경험으로는, 경로 개체를 더 문자열보다 파일 시스템 조작을 위해 유용하다.

이후 이 대답에 모든 것 파이선 3의 독점 기사다, 이것이 또 다른 이유는 업그레이드할 수 있습니다.

Python 3.8에서는missing_ok=True그리고.pathlib.Path.unlink(여기에 표시)

from pathlib import Path

my_file = Path("./dir1/dir2/file.txt")

# Python 3.8+
my_file.unlink(missing_ok=True)

# Python 3.7 and earlier
if my_file.exists():
    my_file.unlink()

os.path.exists 반품True폴더 및 파일용입니다.대신 을 사용하여 파일이 존재하는지 여부를 확인합니다.

Andy Jones의 답변 정신에 따라 진정한 3진법 연산은 어떨까요?

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

원라이너입니다.

여러분 중 많은 이들이 동의하지 않을 수도 있습니다. - 아마도 삼진법의 사용을 "추악하게" 고려하는 것과 같은 이유로 - 하지만 이것은 우리가 사람들이 비표준적인 것을 "추악하게"라고 부를 때 추악한 기준에 익숙해진 사람들의 말에 귀를 기울여야 하는지에 대한 질문을 던집니다.

파일이 존재하는지 여부를 확인하고 삭제하는 또 다른 방법은 모듈글로브를 사용하는 것입니다.

from glob import glob
import os

for filename in glob("*.csv"):
    os.remove(filename)

Glob은 *nix 와일드카드로 패턴을 선택할 수 있는 모든 파일을 찾아 목록을 루프합니다.

매트의 대답은 나이든 피톤에게는 맞는 답이고 케빈은 새로운 피톤에게는 맞는 답이다.

의 기능을 카피하지 않는 경우는,silentremove이 기능은 path.py에서 remove_p로 공개됩니다.

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

Python 3.4 이후 버전에서 피톤 방식은 다음과 같습니다.

import os
from contextlib import suppress

with suppress(OSError):
    os.remove(filename)

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

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

Python 3.3을 사용할 수 있습니다.FileNotFoundError다른 오류도 무시하지 않기 때문에 허용 버전보다 더 정확합니다.

try:
    os.remove(filename)
except OSErrorFileNotFoundError
    pass

KISS 제공:

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

그 후:

remove_if_exists("my.file")

이것은 또 다른 해결책입니다.

if os.path.isfile(os.path.join(path, filename)):
    os.remove(os.path.join(path, filename))

언급URL : https://stackoverflow.com/questions/10840533/most-pythonic-way-to-delete-a-file-which-may-not-exist

반응형