try
문을 사용하지 않고 파일의 존재 여부를 어떻게 확인합니까?
질문자 :spence91
답변자 : rslite
당신은 같은 것을 할 수 있도록하는 이유 당신이있는 거 검사 인 경우 if file_exists: open_it()
, 그것은 사용하는 것이 안전합니다 try
를 열기 위해 시도 주위를. 확인하고 열면 파일이 삭제되거나 이동되거나 확인할 때와 열려고 할 때 사이에 위험이 있습니다.
파일을 즉시 열 계획이 아니라면 os.path.isfile
경로가 기존 일반 파일이면
True
반환합니다. 이것은 심볼릭 링크를 따르므로 islink() 및 isfile() 모두 동일한 경로에 대해 true일 수 있습니다.
import os.path os.path.isfile(fname)
파일인지 확인해야 하는 경우.
Python 3.4부터 pathlib
모듈 은 객체 지향 접근 방식을 제공합니다(Python 2.7에서 pathlib2
from pathlib import Path my_file = Path("/path/to/file") if my_file.is_file(): # file exists
디렉토리를 확인하려면 다음을 수행하십시오.
if my_file.is_dir(): # directory exists
Path
객체가 파일인지 디렉토리인지 여부에 관계없이 존재하는지 확인하려면 exists()
.
if my_file.exists(): # path exists
try
블록에서 resolve(strict=True)
를 사용할 수도 있습니다.
try: my_abs_path = my_file.resolve(strict=True) except FileNotFoundError: # doesn't exist else: # exists
답변자 : PierreBdR
os.path.exists
기능이 있습니다.
import os.path os.path.exists(file_path)
이것은 파일과 디렉토리 모두에 대해 True
os.path.isfile(file_path)
구체적으로 파일인지 테스트합니다. 심볼릭 링크를 따릅니다.
답변자 : bortzmeyer
달리 isfile()
, exists()
돌아갑니다 True
디렉토리에 대해. 따라서 일반 파일만 원하는지 아니면 디렉토리도 원하는지에 따라 isfile() 또는 isfile()
exists()
. 다음은 간단한 REPL 출력입니다.
>>> os.path.isfile("/etc/password.txt") True >>> os.path.isfile("/etc") False >>> os.path.isfile("/does/not/exist") False >>> os.path.exists("/etc/password.txt") True >>> os.path.exists("/etc") True >>> os.path.exists("/does/not/exist") False
답변자 : Paul
import os.path if os.path.isfile(filepath): print("File exists")
답변자 : Yugal Jindle
os.access()
와 함께 os.path.isfile()
사용:
import os PATH = './file.txt' if os.path.isfile(PATH) and os.access(PATH, os.R_OK): print("File exists and is readable") else: print("Either the file is missing or not readable")
답변자 : benefactual
import os os.path.exists(path) # Returns whether the path (directory or file) exists or not os.path.isfile(path) # Returns whether the file exists or not
답변자 : Community Wiki
거의 모든 가능한 방법이 기존 답변(예: Python 3.4 특정 항목이 추가됨)에 (최소한 하나) 나열되어 있지만 모든 것을 함께 그룹화하려고 노력할 것입니다.
참고 : 내가 게시할 Python 표준 라이브러리 코드의 모든 부분은 버전 3.5.3에 속합니다.
문제 설명 :
- 파일 확인( 논쟁 가능 : 폴더("특수" 파일) ?) 존재 여부
- try / except / else / finally 블록을 사용하지 마십시오.
가능한 해결책 :
[파이썬 3]: os.path. 존재 ( 경로 ) (또한 약간 다른 동작에 대해
os.path.isfile
,os.path.isdir
,os.path.lexists
와 같은 다른 함수 패밀리 멤버를 확인하십시오)os.path.exists(path)
경로 가 기존 경로 또는 열린 파일 설명자를 참조하는 경우
True
반환합니다. 깨진 심볼릭 링크에 대해False
를 반환합니다. 일부 플랫폼에서 이 함수는 경로가 실제로 존재하더라도 요청된 파일에서 os.stat() 를 실행할 수 있는 권한이 부여되지 않은 경우False
모두 좋지만 가져오기 트리를 따르는 경우:
os.path
- posixpath.py ( ntpath.py )genericpath.py , 줄 ~#20+
def exists(path): """Test whether a path exists. Returns False for broken symbolic links""" try: st = os.stat(path) except os.error: return False return True
[Python 3]: os 주변의 try / except 블록일 뿐입니다. stat ( 경로, *, dir_fd=없음, follow_symlinks=True ) . 따라서 코드는 시도 / 제외 무료이지만 프레임 스택에는 (적어도) 하나의 그러한 블록이 있습니다. 이것은 다른 함수(
os.path.isfile
포함 )에도 적용됩니다.- 경로를 처리하는 더 멋진(그리고 더 많은 python ic) 방법이지만
후드 아래에서는 정확히 동일한 작업을 수행합니다( pathlib.py , line ~#1330 ).
def is_file(self): """ Whether this path is a regular file (also True for symlinks pointing to regular files). """ try: return S_ISREG(self.stat().st_mode) except OSError as e: if e.errno not in (ENOENT, ENOTDIR): raise # Path doesn't exist or is a broken symlink # (see https://bitbucket.org/pitrou/pathlib/issue/12/) return False
[Python 3]: 문 컨텍스트 관리자 사용 . 어느 하나:
하나 만들기:
class Swallow: # Dummy example swallowed_exceptions = (FileNotFoundError,) def __enter__(self): print("Entering...") def __exit__(self, exc_type, exc_value, exc_traceback): print("Exiting:", exc_type, exc_value, exc_traceback) return exc_type in Swallow.swallowed_exceptions # only swallow FileNotFoundError (not eg TypeError - if the user passes a wrong argument like None or float or ...)
그리고 그것의 사용 - 나는 복제 것
os.path.isfile
(이것은 단지 목적을 설명하기위한, 생산과 같은 코드를 작성하지 않는 것이 주) 동작을 :import os import stat def isfile_seaman(path): # Dummy func result = False with Swallow(): result = stat.S_ISREG(os.stat(path).st_mode) return result
[Python 3] 사용: contextlib. 억제 ( *exceptions ) - 예외를 선택적으로 억제하기 위해 특별히 설계되었습니다.
그러나 [Python 3] 과 같이 try / except / else / finally 블록에 대한 래퍼인 것 같습니다 . with 문 은 다음과 같이 말합니다.이것은 일반적인 try ... except ... finally 사용 패턴이 편리한 재사용을 위해 캡슐화될 수 있도록 합니다.
파일 시스템 탐색 기능(및 일치하는 항목에 대한 결과 검색)
[파이썬 3]: os. listdir ( path='.' ) (또는 [Python 3]: Python v 3.5의 os. scandir ( path='.' )
답변자 : Cody Piersall
Python 3.4+ 에는 객체 지향 경로 모듈인 pathlib 가 있습니다. 이 새 모듈을 사용하여 다음과 같이 파일이 존재하는지 확인할 수 있습니다.
import pathlib p = pathlib.Path('path/to/file') if p.is_file(): # or p.is_dir() to see if it is a directory # do stuff
파일을 열 때 try/except
블록을 계속 사용할 수 있고 일반적으로 사용해야 합니다.
try: with p.open() as f: # do awesome stuff except OSError: print('Well darn.')
pathlib 모듈에는 편리한 글로빙(globbing), 파일 소유자 확인, 더 쉬운 경로 결합 등 멋진 것들이 많이 있습니다. 확인해 볼 가치가 있습니다. 이전 Python(버전 2.6 이상)을 사용하는 경우에도 pip를 사용하여 pathlib를 설치할 수 있습니다.
# installs pathlib2 on older Python versions # the original third-party module, pathlib, is no longer maintained. pip install pathlib2
그런 다음 다음과 같이 가져옵니다.
# Older Python versions import pathlib2 as pathlib
답변자 : un33k
이것은 파일이 존재하는지 확인하는 가장 간단한 방법입니다. 그냥 당신이 당신이 그것을 열 필요가있을 때 거기를 보장하지 않습니다을 선택하면 파일이 존재하기 때문이다.
import os fname = "foo.txt" if os.path.isfile(fname): print("file does exist at this time") else: print("no such file exists at this time")
답변자 : pkoch
try 문을 선호합니다. 더 나은 스타일로 간주되며 경쟁 조건을 피합니다.
내 말을 믿지 마세요. 이 이론에 대한 많은 지원이 있습니다. 다음은 몇 가지입니다.
- 스타일: http://allendowney.com/sd/notes/notes11.txt의 "비정상적 조건 처리" 섹션
- 경쟁 조건 피하기
답변자 : Aaron Hall
try 문을 사용하지 않고 Python을 사용하여 파일이 존재하는지 어떻게 확인합니까?
이제 Python 3.4부터 사용할 수 있으며 파일 이름 Path
is_file
메서드를 확인합니다(일반 파일을 가리키는 심볼릭 링크에 대해서도 True를 반환합니다).
>>> from pathlib import Path >>> Path('/').is_file() False >>> Path('/initrd.img').is_file() True >>> Path('/doesnotexist').is_file() False
Python 2를 사용하는 경우 pypi, pathlib2
에서 pathlib 모듈을 백포트하거나 os.path
모듈에서 isfile
>>> import os >>> os.path.isfile('/') False >>> os.path.isfile('/initrd.img') True >>> os.path.isfile('/doesnotexist') False
이제 위의 내용이 아마도 여기에서 가장 실용적인 직접적인 대답일 것입니다. 그러나 경쟁 조건의 가능성(당신이 성취하려는 것에 따라 다름)과 기본 구현이 try
사용한다는 사실이 있지만 Python은 모든 곳에서 try
구현.
try
사용하기 때문에 그것을 사용하는 구현을 피할 이유가 없습니다.
그러나 이 답변의 나머지 부분에서는 이러한 주의 사항을 고려하려고 합니다.
더 길고 훨씬 현학적인 답변
Python 3.4부터 사용 가능 pathlib
Path
객체를 사용하세요. 디렉토리가 파일이 아니기 때문에 .exists
가 정확하지 않다는 점에 유의 하십시오(모든 것이 파일이라는 유닉스 의미를 제외하고).
>>> from pathlib import Path >>> root = Path('/') >>> root.exists() True
is_file
을 사용해야 합니다.
>>> root.is_file() False
is_file
대한 도움말은 다음과 같습니다.
is_file(self) Whether this path is a regular file (also True for symlinks pointing to regular files).
그래서 우리가 파일이라고 알고 있는 파일을 구해봅시다:
>>> import tempfile >>> file = tempfile.NamedTemporaryFile() >>> filepathobj = Path(file.name) >>> filepathobj.is_file() True >>> filepathobj.exists() True
기본적으로 NamedTemporaryFile
은 닫힐 때 파일을 삭제합니다(더 이상 참조가 없으면 자동으로 닫힙니다).
>>> del file >>> filepathobj.exists() False >>> filepathobj.is_file() False
구현 is_file
살펴보면 is_file 이 try
사용한다는 것을 알 수 있습니다.
def is_file(self): """ Whether this path is a regular file (also True for symlinks pointing to regular files). """ try: return S_ISREG(self.stat().st_mode) except OSError as e: if e.errno not in (ENOENT, ENOTDIR): raise # Path doesn't exist or is a broken symlink # (see https://bitbucket.org/pitrou/pathlib/issue/12/) return False
경쟁 조건: 우리가 시도를 좋아하는 이유
우리는 경쟁 조건을 피하기 때문에 try
try
사용하면 파일이 있을 것으로 예상하면서 단순히 파일을 읽으려고 시도하고, 그렇지 않은 경우 예외를 포착하고 합리적인 대체 동작을 수행합니다.
파일을 읽으려고 시도하기 전에 파일이 존재하는지 확인하려는 경우 파일을 삭제하고 여러 스레드 또는 프로세스를 사용 중일 수 있거나 다른 프로그램이 해당 파일에 대해 알고 있고 삭제할 수 있는 경우 - 다음과 같은 위험이 있습니다. 경쟁 조건 이 존재하는지 확인하면 조건 (존재)이 변경되기 전에 열기 위해 경주하고 있기 때문입니다.
경쟁 조건은 프로그램이 실패할 수 있는 매우 작은 창이 있기 때문에 디버그하기가 매우 어렵습니다.
그러나 이것이 동기라면 suppress
컨텍스트 관리자를 사용하여 try
문의 값을 얻을 수 있습니다.
try 문 없이 경쟁 조건 피하기: suppress
Python 3.4는 의미상으로 더 적은 줄로 정확히 동일한 작업을 수행하는 동시에 try
suppress
컨텍스트 관리자(이전에는 ignore
)를 제공합니다.
from contextlib import suppress from pathlib import Path
용법:
>>> with suppress(OSError), Path('doesnotexist').open() as f: ... for line in f: ... print(line) ... >>> >>> with suppress(OSError): ... Path('doesnotexist').unlink() ... >>>
이전 Python의 경우 자체 suppress
try
가 없으면 사용하는 것보다 더 장황합니다. 나는 이것이 실제로 컨텍스트 관리자를 대신 사용하기 때문에 Python 3.4 이전에 적용할 수 있는 Python의 모든 수준에서 try
를 사용하지 않는 유일한 대답 이라고 믿습니다.
class suppress(object): def __init__(self, *exceptions): self.exceptions = exceptions def __enter__(self): return self def __exit__(self, exc_type, exc_value, traceback): if exc_type is not None: return issubclass(exc_type, self.exceptions)
시도하면 더 쉬울 것입니다.
from contextlib import contextmanager @contextmanager def suppress(*exceptions): try: yield except exceptions: pass
"시도 없이" 요청을 충족하지 않는 기타 옵션:
이스파일
import os os.path.isfile(path)
문서에서 :
os.path.isfile(path)
경로가 기존 일반 파일이면 True를 반환합니다. 이것은 심볼릭 링크를 따르므로
islink()
및isfile()
모두 동일한 경로에 대해 true일 수 있습니다.
그러나 이 함수의 소스 를 살펴보면 실제로 try 문을 사용한다는 것을 알 수 있습니다.
# This follows symbolic links, so both islink() and isdir() can be true # for the same path on systems that support symlinks def isfile(path): """Test whether a path is a regular file""" try: st = os.stat(path) except os.error: return False return stat.S_ISREG(st.st_mode)
>>> OSError is os.error True
주어진 경로를 사용하여 통계를 얻을 수 OSError
포착한 다음 예외가 발생하지 않은 경우 파일인지 확인하기만 하면 됩니다.
파일로 무언가를 하려는 경우 경쟁 조건을 피하기 위해 try-except를 사용하여 직접 시도하는 것이 좋습니다.
try: with open(path) as f: f.read() except OSError: pass
os.access
Unix 및 Windows os.access
이지만 사용하려면 플래그를 전달해야 하며 파일과 디렉토리를 구분하지 않습니다. 이것은 실제 호출 사용자가 상승된 권한 환경에서 액세스할 수 있는지 테스트하는 데 더 많이 사용됩니다.
import os os.access(path, os.F_OK)
isfile
과 동일한 경쟁 조건 문제를 겪고 있습니다. 문서에서 :
참고: 사용자가 실제로 파일을 열기 전에 open()을 사용하여 파일을 열 수 있는 권한이 있는지 확인하기 위해 access()를 사용하면 보안 허점이 생깁니다. 사용자가 파일을 조작하기 위해 파일을 확인하고 여는 사이의 짧은 시간 간격을 악용할 수 있기 때문입니다. EAFP 기술을 사용하는 것이 좋습니다. 예를 들어:
if os.access("myfile", os.R_OK): with open("myfile") as fp: return fp.read() return "some default data"
다음과 같이 작성하는 것이 좋습니다.
try: fp = open("myfile") except IOError as e: if e.errno == errno.EACCES: return "some default data" # Not a permission error. raise else: with fp: return fp.read()
os.access
사용하지 마십시오. 위에서 논의한 상위 레벨 객체 및 기능보다 사용자 오류의 기회가 더 많은 하위 레벨 함수입니다.
다른 답변에 대한 비판:
또 다른 답변은 os.access
에 대해 이렇게 말합니다.
개인적으로, 후드 아래에서 네이티브 API("${PYTHON_SRC_DIR}/Modules/posixmodule.c"를 통해)를 호출하기 때문에 이 방법을 선호하지만, 가능한 사용자 오류에 대한 게이트도 열어주고 다른 변형만큼 Pythonic하지 않습니다. :
이 답변은 정당화 없이 비 Pythonic, 오류가 발생하기 쉬운 방법을 선호한다고 말합니다. 사용자가 이해도 없이 저수준 API를 사용하도록 부추기는 것 같습니다.
True
반환하여 모든 예외( KeyboardInterrupt
및 SystemExit
! 포함)가 자동으로 전달되도록 하는 컨텍스트 관리자를 생성합니다. 이는 버그를 숨기는 좋은 방법입니다.
이것은 사용자가 잘못된 관행을 채택하도록 부추기는 것 같습니다.
답변자 : codelox
import os #Your path here eg "C:\Program Files\text.txt" #For access purposes: "C:\\Program Files\\text.txt" if os.path.exists("C:\..."): print "File found!" else: print "File not found!"
os
를 가져오면 운영 체제에서 표준 작업을 더 쉽게 탐색하고 수행할 수 있습니다.
참고로 Python을 사용하여 파일이 존재하는지 확인하는 방법 도 참조하세요.
높은 수준의 작업이 필요한 경우 shutil
사용하십시오.
답변자 : Tom Fuller
os.path.isfile()
, os.path.isdir()
및 os.path.exists()
하여 파일 및 폴더 테스트
"경로"가 유효한 경로라고 가정하면 이 표는 파일 및 폴더에 대해 각 함수가 반환하는 내용을 보여줍니다.
확장자를 얻기 위해 os.path.splitext()
를 사용하여 파일이 특정 유형의 파일인지 테스트할 수도 있습니다(아직 모르는 경우)
>>> import os >>> path = "path to a word document" >>> os.path.isfile(path) True >>> os.path.splitext(path)[1] == ".docx" # test if the extension is .docx True
답변자 : KaiBuxe
2016년에 가장 좋은 방법은 여전히 os.path.isfile
사용하는 것입니다.
>>> os.path.isfile('/path/to/some/file.txt')
또는 Python 3에서는 pathlib
를 사용할 수 있습니다.
import pathlib path = pathlib.Path('/path/to/some/file.txt') if path.is_file(): ...
답변자 : chad
isfile()
사이에 의미 있는 기능적 차이가 있는 것 같지 않으므로 어느 것이 의미가 있는지 사용해야 합니다.
파일을 읽으려면 파일이 있으면 다음을 수행하십시오.
try: f = open(filepath) except IOError: print 'Oh dear.'
그러나 파일이 존재하는 경우 파일의 이름을 변경하고 따라서 열 필요가 없는 경우 다음을 수행하십시오.
if os.path.isfile(filepath): os.rename(filepath, filepath + '.old')
파일에 쓰려면 파일이 존재하지 않는 경우 다음을 수행하십시오.
# python 2 if not os.path.isfile(filepath): f = open(filepath, 'w') # python 3, x opens for exclusive creation, failing if the file already exists try: f = open(filepath, 'wx') except IOError: print 'file already exists'
파일 잠금이 필요한 경우 다른 문제입니다.
답변자 : philberndt
다음을 시도할 수 있습니다(더 안전함).
try: # http://effbot.org/zone/python-with-statement.htm # 'with' is safer to open a file with open('whatever.txt') as fh: # Do something with 'fh' except IOError as e: print("({})".format(e))
출력은 다음과 같습니다.
([오류번호 2] 해당 파일이나 디렉토리가 없습니다: 'whatever.txt')
그런 다음 결과에 따라 프로그램이 계속 실행되거나 원하는 경우 중지하도록 코딩할 수 있습니다.
답변자 : AbstProcDo
날짜:2017-12-04
가능한 모든 솔루션은 다른 답변에 나열되어 있습니다.
파일이 존재하는지 확인하는 직관적이고 논쟁의 여지가 있는 방법은 다음과 같습니다.
import os os.path.isfile('~/file.md') # Returns True if exists, else False # additionaly check a dir os.path.isdir('~/folder') # Returns True if the folder exists, else False # check either a dir or a file os.path.exists('~/file')
나는 당신의 참조를 위해 철저한 치트 시트를 만들었습니다.
#os.path methods in exhaustive cheatsheet {'definition': ['dirname', 'basename', 'abspath', 'relpath', 'commonpath', 'normpath', 'realpath'], 'operation': ['split', 'splitdrive', 'splitext', 'join', 'normcase'], 'compare': ['samefile', 'sameopenfile', 'samestat'], 'condition': ['isdir', 'isfile', 'exists', 'lexists' 'islink', 'isabs', 'ismount',], 'expand': ['expanduser', 'expandvars'], 'stat': ['getatime', 'getctime', 'getmtime', 'getsize']}
답변자 : Zizouz212
try
및 except
문을 사용하는 것이 좋지만 다음은 몇 가지 가능성이 있습니다(개인적으로 가장 좋아하는 것은 os.access
사용).
파일을 열어보십시오.
파일을 열면 항상 파일의 존재를 확인합니다. 다음과 같이 함수를 만들 수 있습니다.
def File_Existence(filepath): f = open(filepath) return True
False이면 이후 버전의 Python에서 처리되지 않은 IOError 또는 OSError로 실행을 중지합니다. 예외를 잡으려면 try except 절을 사용해야 합니다.
try
except` 문을 항상 사용할 수 있습니다(생각하게 해준 hsandt 덕분에).def File_Existence(filepath): try: f = open(filepath) except IOError, OSError: # Note OSError is for later versions of Python return False return True
os.path.exists(path)
:이렇게 하면 지정한 항목이 있는지 확인합니다. 그러나 파일 및 디렉토리를 확인하므로 사용 방법에 주의하십시오.
import os.path >>> os.path.exists("this/is/a/directory") True >>> os.path.exists("this/is/a/file.txt") True >>> os.path.exists("not/a/directory") False
os.access(path, mode)
:파일에 대한 액세스 권한이 있는지 확인합니다. 권한을 확인합니다. os.py 문서를 바탕으로,를 입력
os.F_OK
, 그것은 경로의 존재를 확인합니다. 그러나 이것을 사용하면 권한 확인과 파일 열기 사이의 시간을 사용하여 누군가가 파일을 공격할 수 있으므로 보안 허점이 생깁니다. 대신 권한을 확인하는 대신 파일 열기로 직접 이동해야 합니다. ( EAFP 대 LBYP ). 나중에 파일을 열지 않고 존재 여부만 확인한다면 이것을 사용할 수 있습니다.어쨌든 여기:
>>> import os >>> os.access("/is/a/file.txt", os.F_OK) True
또한 파일의 존재를 확인할 수 없는 두 가지 방법이 있음을 언급해야 합니다. 문제는 permission denied
되거나 no such file or directory
입니다. IOError
를 잡으면 IOError as e
(첫 번째 옵션과 같이)로 설정한 다음 문제를 확인할 수 있도록 print(e.args)
도움이 되기를 바랍니다! :)
답변자 : Andrew
이 작업을 수행하는 가장 쉬운 방법은
import os if os.path.exists(FILE): # file exists pass else: # file does not exists pass
os 라이브러리에서, FILE 은 상대 경로입니다. Windows에서는 이것이 작동하지 않을 수도 있고 작동하지 않을 수도 있으며 os.path.exists(os.path.join(os.path.abspath('./'), FILE))
을 수행하여 절대 경로를 사용해야 할 수도 있습니다. 여기서 FILE 은 여전히 상대 경로와 파일 이름
답변자 : Memin
TL;DR
답은 pathlib
모듈입니다.
Pathlib 는 아마도 거의 모든 파일 작업을 위한 가장 현대적이고 편리한 방법일 것입니다. 파일 이나 폴더 의 존재는 한 줄의 코드로 충분합니다.
from pathlib import Path if Path("myfile.txt").exists(): # works for both file and folders # do your cool stuff...
pathlib
모듈은 Python 3.4
이 필요합니다. 이 라이브러리를 사용하면 파일 및 폴더로 작업하는 동안 훨씬 쉽게 작업할 수 있으며 사용하기에도 좋습니다. 이에 대한 자세한 문서는 다음과 같습니다( https://docs .python.org/3/library/pathlib.html ).
BTW, 경로를 재사용하려면 변수에 할당하는 것이 좋습니다.
그렇게 될 것이다
from pathlib import Path p = Path("loc/of/myfile.txt") if p.exists(): # works for both file and folders # do stuffs... #reuse 'p' if needed.
답변자 : zgoda
또한 os.access()
:
if os.access("myfile", os.R_OK): with open("myfile") as fp: return fp.read()
R_OK
, W_OK
및 X_OK
권한 테스트를 위한 플래그입니다( doc ).
답변자 : bergercookie
파일을 열기 위한 것이라면 다음 기술 중 하나를 사용할 수 있습니다.
with open('somefile', 'xt') as f: #Using the x-flag, Python3.3 and above f.write('Hello\n') if not os.path.exists('somefile'): with open('somefile', 'wt') as f: f.write("Hello\n") else: print('File already exists!')
업데이트
혼란을 피하기 위해 내가 얻은 답변을 기반으로 현재 답변은 주어진 이름 의 파일이나 디렉토리를 찾습니다.
답변자 : Abhimanyu Sharma
os.path.exists()를 사용할 수 있습니다.
import os print(os.path.exists("file"))
도움이 되기를 바랍니다 :D
답변자 : Pedro Lobito
if os.path.isfile(path_to_file): try: open(path_to_file) pass except IOError as e: print "Unable to open file"
예외를 발생시키는 것은 프로그램의 흐름 제어에 대한 수용 가능한 Pythonic 접근 방식으로 간주됩니다. IOError로 누락된 파일을 처리하는 것을 고려하십시오. 이 상황에서 파일이 존재하지만 사용자에게 읽기 권한이 없으면 IOError 예외가 발생합니다.
답변자 : durjoy
pathlib
, os
, paths
등과 같은 다른 라이브러리를 가져올 필요가 없습니다.
import numpy as np np.DataSource().exists("path/to/your/file")
존재 여부에 따라 true 또는 false를 반환합니다.
답변자 : Chris
try:
하지 않고 Brian의 제안을 작성할 수 있습니다.
from contextlib import suppress with suppress(IOError), open('filename'): process()
suppress
는 Python 3.4의 일부입니다. 이전 릴리스에서는 자신의 억제를 빠르게 작성할 수 있습니다.
from contextlib import contextmanager @contextmanager def suppress(*exceptions): try: yield except exceptions: pass
답변자 : Ali Hallaji
파일 또는 디렉토리가 존재하는지 확인
다음 세 가지 방법을 따를 수 있습니다.
참고 1: 파일에만 사용되는
os.path.isfile
import os.path os.path.isfile(filename) # True if file exists os.path.isfile(dirname) # False if directory exists
참고 2: 파일과 디렉토리 모두에 사용되는
os.path.exists
import os.path os.path.exists(filename) # True if file exists os.path.exists(dirname) #True if directory exists
pathlib.Path
메서드(Python 3+에 포함, Python 2용 pip로 설치 가능)
from pathlib import Path Path(filename).exists()
답변자 : Marcel Wilson
다른 답변에 정확히 반영되지 않은 약간의 변형을 하나 더 추가합니다.
file_path
가 None
이거나 빈 문자열인 경우를 처리합니다.
def file_exists(file_path): if not file_path: return False elif not os.path.isfile(file_path): return False else: return True
Shahbaz의 제안에 따라 변형 추가
def file_exists(file_path): if not file_path: return False else: return os.path.isfile(file_path)
Peter Wood의 제안에 따라 변형 추가
def file_exists(file_path): return file_path and os.path.isfile(file_path):
답변자 : Mike McKerns
저는 약 10년 동안 사용된 패키지의 작성자이며 이 질문을 직접적으로 해결하는 기능이 있습니다. 기본적으로 Windows가 아닌 시스템을 사용하는 경우 Popen
find
에 액세스합니다. 그러나 Windows를 사용하는 경우 효율적인 파일 시스템 워커로 find
코드 자체는 사용하지 않는 try
운영 체제를 결정하고, 따라서 "유닉스"스타일에 당신을 조종 제외 ... 블록을 find
하거나 손으로 buillt의 find
. try
가 더 빠르다는 것을 보여 주었기 때문에 나는 그곳에서 (그러나 다른 곳에서는) 그것을 사용했습니다.
>>> import pox >>> pox.find('*python*', type='file', root=pox.homedir(), recurse=False) ['/Users/mmckerns/.python']
그리고 박사는…
>>> print pox.find.__doc__ find(patterns[,root,recurse,type]); Get path to a file or directory patterns: name or partial name string of items to search for root: path string of top-level directory to search recurse: if True, recurse down from root directory type: item filter; one of {None, file, dir, link, socket, block, char} verbose: if True, be a little verbose about the search On some OS, recursion can be specified by recursion depth (an integer). patterns can be specified with basic pattern matching. Additionally, multiple patterns can be specified by splitting patterns with a ';' For example: >>> find('pox*', root='..') ['/Users/foo/pox/pox', '/Users/foo/pox/scripts/pox_launcher.py'] >>> find('*shutils*;*init*') ['/Users/foo/pox/pox/shutils.py', '/Users/foo/pox/pox/__init__.py'] >>>
구현은 다음과 같습니다. https://github.com/uqfoundation/pox/blob/89f90fb308f285ca7a62eabe2c38acb87e89dad9/pox/shutils.py#L190
답변자 : Love and peace - Joe Codeswell
다음은 Linux 명령줄 환경을 위한 1줄 Python 명령입니다. 나는 그렇게 섹시한 Bash 사람이 아니기 때문에 이것을 매우 편리하게 생각합니다.
python -c "import os.path; print os.path.isfile('/path_to/file.xxx')"
도움이 되기를 바랍니다.
출처 : Here
출처 : http:www.stackoverflow.com/questions/82831/how-do-i-check-whether-a-file-exists-without-exceptions">
'etc. > StackOverFlow' 카테고리의 다른 글
JavaScript에서 객체를 딥 클론하는 가장 효율적인 방법은 무엇입니까? (0) | 2021.09.22 |
---|---|
JavaScript에서 문자열에 하위 문자열이 포함되어 있는지 확인하는 방법은 무엇입니까? (0) | 2021.09.22 |
올바른 JSON 콘텐츠 유형은 무엇입니까? (0) | 2021.09.22 |
프로그램을 실행하거나 시스템 명령을 호출하는 방법은 무엇입니까? (0) | 2021.09.22 |
Java가 "참조별 전달"입니까 아니면 "값별 전달"입니까? (0) | 2021.09.22 |