대부분의 거대한 방법은 존재하지 않을지도 모른 파일을 삭제합니다.
나는 파일을 삭제하고 싶다.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)
한다면filename
는pathlib.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
'programing' 카테고리의 다른 글
하위 프로세스에 대한 비차단 읽기입니다.Python의 파이프 (0) | 2022.10.02 |
---|---|
물음표와 함께 검은색 다이아몬드가 거의 표시되지 않는 PHP 출력 (0) | 2022.09.26 |
필드에 $x가 포함되지 않는 SQL 쿼리 (0) | 2022.09.26 |
Android Studio Gradle 프로젝트 "VM의 데몬 프로세스/초기화를 시작할 수 없습니다" (0) | 2022.09.26 |
phpmyadmin - count(): 파라미터는 카운터블을 구현하는 어레이 또는 객체여야 합니다. (0) | 2022.09.26 |