python 리스트 파이썬 - 파일이 예외없이 존재하는지 어떻게 확인합니까?



15 Answers

os.path.exists 함수가 있습니다.

import os.path
os.path.exists(file_path)

이것은 파일과 디렉토리 모두에 대해 True 를 반환하지만 대신

os.path.isfile(file_path)

특정 파일인지 테스트합니다. 그것은 심볼릭 링크를 따른다.

개수 분류 삭제

try 문을 사용하지 않고 파일이 존재하는지 여부를 어떻게 알 수 있습니까?




import os.path

if os.path.isfile(filepath):



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



이것은 파일이 있는지를 확인하는 가장 간단한 방법입니다. 파일을 검사했을 때 존재했다고해서 파일을 열어야 할 때 파일이 존재한다는 것을 보장 하지는 않습니다.

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")



try 문을 선호하십시오. 더 나은 스타일로 간주되어 경쟁 조건을 피합니다.

내 말을 믿지 마라. 이 이론에 대한 많은 지원이 있습니다. 한 쌍있다 :




import os
#Your path here e.g. "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 를 가져 오면 운영 체제에서 표준 작업을보다 쉽게 ​​탐색하고 수행 할 수 있습니다.

참고로 share 도 참조하십시오 share

높은 수준의 작업이 필요한 경우 shutil 사용하십시오.




2016 년 가장 좋은 방법은 여전히 os.path.isfile 사용하는 것입니다.

>>> os.path.isfile('/path/to/some/file.txt')

또는 파이썬 3에서는 pathlib 를 사용할 수 있습니다 :

import pathlib
path = pathlib.Path('/path/to/some/file.txt')
if path.is_file():
    ...



당신은 이것을 시도 할 수 있습니다 (더 안전한) :

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))

출력은 다음과 같습니다.

([Errno 2] 해당 파일이나 디렉토리가 없습니다 : 'whatever.txt')

그런 다음 결과에 따라 프로그램을 계속 실행하거나 원하는 경우 코드를 중지 할 수 있습니다.




Python 3.4에서는 언어가 파일을 관리하는 새로운 모듈을 제공합니다.

import pathlib
path = pathlib.Path('path/to/file')
if path.is_file(): # If you want to check a directory: path.is_dir()
    # If it is true, return true on your code.



파일을 여는 경우 다음 기술 중 하나를 사용할 수 있습니다.

>>> 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!')

최신 정보

그냥 혼란을 피하기 위해 내가 가진 대답을 기반으로, 현재 답변은 주어진 이름 으로 파일 이나 디렉토리를 찾습니다 .




Brian의 제안을없이 작성할 수 있습니다 try:.

from contextlib import suppress

with suppress(IOError), open('filename'):
    process()

suppressPython 3.4의 일부입니다. 이전 버전에서는 신속하게 직접 작성을 할 수 있습니다.

from contextlib import contextmanager

@contextmanager
def suppress(*exceptions):
    try:
        yield
    except exceptions:
        pass



다음은 Linux 명령 행 환경을위한 1 행 Python 명령입니다. 나는 이처럼 뜨거운 배쉬 녀석이 아니기 때문에 이것을 아주 잘 찾는다.

python -c "import os.path; print os.path.isfile('/path_to/file.xxx')"

이것이 도움이되기를 바랍니다.




저는 약 10 년 동안 있었던 패키지의 저자이며,이 문제를 직접 해결하는 기능을 가지고 있습니다. 기본적으로 비 Windows 시스템에있는 경우 Popen액세스 하는 데 사용 됩니다 find. 그러나 Windows를 find사용하는 경우 효율적인 파일 시스템 워커를 사용하여 복제합니다 .

코드 자체는 try운영체제를 결정할 때를 제외하고 는 블록을 사용하지 않으므로 "Unix"스타일 find또는 손으로 작성해야 find합니다. 타이밍 테스트는 tryOS를 결정 하는 것이 더 빠르다 는 것을 보여 주었기 때문에 거기에서 하나를 사용했습니다 (그러나 아무데도 사용하지 않았습니다).

>>> 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




날짜 : 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']}



try 문을 사용하지 않고 파일이 있는지 여부를 어떻게 확인합니까?

2016 년에도 여전히 파일이 존재하고 파일인지 확인하는 가장 쉬운 방법입니다.

import os
os.path.isfile('./file.txt')    # Returns True if exists, else False

isfile내부적으로 사용하는 단지 도우미 메서드 실제로 os.stat하고 stat.S_ISREG(mode)아래는. 이것은 os.stat파일, 디렉토리, 소켓, 버퍼 등에 대한 자세한 정보를 제공하는 하위 레벨 방법입니다. os.stat에 대한 자세한 내용은 여기

참고 : 그러나이 방법은 파일을 어떤 식 으로든 잠그지 않으므로 코드가 "사용 시간 확인 "( TOCTTOU ) 버그에 취약해질 수 있습니다 .

따라서 예외를 발생시키는 것은 프로그램에서 흐름 제어를위한 허용 가능한 Pythonic 접근 방식으로 간주됩니다. 그리고 if문장 ( 그냥 조언 ) 보다는 IOErrors가있는 누락 된 파일을 처리하는 것을 고려해야합니다 .




Related