파일이나 폴더가 파이썬에 존재하는지 확인하는 7가지 방법

Python 표준 라이브러리에는 개발자가 문제를 해결하는 데 필요한 대부분의 기능이 포함되어 있습니다. 이 자습서에서는 내장 모듈만 사용하여 파일 또는 디렉터리의 존재를 확인하는 다양한 방법을 배웁니다.

파일이나 스크립트가 올바른 위치에 있는지 확인하는 것은 모든 CLI 프로그램에 중요합니다. 실행 시점에 특정 파일이 없으면 프로그램이 무용지물이 될 수 있습니다.

오늘의 자습서에서는 Python에 파일이나 폴더가 있는지 확인하는 몇 가지 빠른 방법을 배웁니다.

시작하기 전에

아래 명령을 실행하기 전에 시스템에 Python 3가 설치되어 있는지 확인하십시오. 터미널을 열고 다음 명령을 입력합니다.

python --version
# Python 3.9.5, my result

2.x 버전이 있는 경우 “python3” 명령을 사용해야 합니다. Python 3가 설치되어 있지 않은 경우 Python 설치 가이드를 확인하세요.

이 자습서와 함께 일부 테스트 파일을 사용할 것이므로 다음 파일을 생성해야 합니다.

touch testfile.txt
mkdir testdirectory/ 
touch testdirectory/otherfile.txt

위의 명령은 재생할 파일, 테스트 디렉터리 및 테스트 디렉터리 내의 다른 파일을 만듭니다. 내용을 읽을 필요가 없으므로 파일이 비어 있을 수 있습니다.

참고: Windows를 사용하는 경우 그래픽 파일 관리자를 사용하여 해당 파일의 단순 파일 구조를 설정하십시오.

마지막으로, 우리는 사용할 것입니다 이파이썬 작업할 수 있는 멋진 인터페이스를 제공하는 대화형 Python 셸로 사용합니다. 이것은 단지 상품이므로 반드시 필요한 것은 아닙니다.

pip install ipython

이렇게 하면 ipython을 입력하기만 하면 멋진 Python 셸에 액세스할 수 있습니다.

이제 모든 설정이 끝났습니다. Python에 폴더나 파일이 있는지 확인하는 방법을 살펴보겠습니다.

시도, 열기 및 제외

이것은 가장 간단한 옵션입니다. 존재하지 않는 파일을 열려고 하면 파이썬이 FileNotFoundError.

In [1]: open('im-not-here.txt')
---------------------------------------------------------------------------
FileNotFoundError: [Errno 2] No such file or directory: 'im-not-here.txt'

이를 활용하여 찾고 있는 파일이 존재하지 않는 경우 예외를 처리할 수 있습니다.

In [2]: try:
   ...:     file = open('im-not-here.txt')
   ...:     print(file) # File handler
   ...:     file.close()
   ...: except FileNotFoundError:
   ...:     print('Sorry the file we're looking for doesn' exist')
   ...:     exit()
   ...: 
Sorry the file we're looking for doesn't exist

위의 코드에서 사용자 지정 메시지를 인쇄하고 파일이 없으면 프로그램 실행을 중지합니다.

  유지 보수 비용을 기록하고 자동차에 대한 알림 설정

exit() 함수는 예외가 발생한 경우에만 실행된다는 점에 유의하십시오. 우리가 찾고 있는 파일이 실제로 존재할 때 어떤 일이 일어나는지 봅시다.

In [2]: try:
   ...:     file = open('testfile.txt')
   ...:     print(file) # File handler
   ...:     file.close()
   ...: except FileNotFoundError:
   ...:     print('Sorry the file we're looking for doesn't exist')
   ...:     exit()
   ...: 
<_io.TextIOWrapper name="testfile.txt" mode="r" encoding='UTF-8'>

파일을 연 직후 파일을 닫는 방법에 유의하십시오. 에 따라 좋은 습관으로 간주됩니다. 파이썬 문서.

with 키워드를 사용하지 않거나 file.close()를 호출하지 않고 file.write() 호출 은 프로그램이 성공적으로 종료되더라도 file.write()의 인수가 디스크에 완전히 기록되지 않을 수 있습니다.

파일에 쓰지 않더라도 다음으로 이어질 수 있으므로 파일을 닫는 것이 좋습니다. 여러 성능 문제.

스스로 파일을 닫고 싶지 않다면 컨텍스트 관리자와 함께 사용할 수 있습니다. 리소스를 정확하게 할당하고 해제하므로 파일을 닫을 필요가 없습니다.

In [3]: try:
   ...:     with open('testfile.txt') as file:
   ...:         print(file)
   ...:         # No need to close the file
   ...: except FileNotFoundError:
   ...:     print('Sorry the file we're looking for doesn't exist')
   ...:     exit()
   ...: 
   ...: 
<_io.TextIOWrapper name="testfile.txt" mode="r" encoding='UTF-8'>

이 방법은 파일에 쓸 때 매우 유용하지만 파일이 있는지 확인만 하려는 경우에는 비효율적입니다. 이를 달성하기 위해 다른 옵션을 살펴보겠습니다.

os.path.exists()

그만큼 OS 모듈 운영 체제와 상호 작용하는 여러 기능을 제공합니다. 파일이나 폴더가 존재하는지 확인하기 위해 파일이나 디렉토리의 경로를 인수로 받는 path.exists() 함수를 사용할 수 있습니다. 경로의 존재에 따라 부울을 반환합니다.

참고: 경로는 파일 시스템에서 파일 또는 디렉토리의 고유한 위치입니다.

파이썬에서는 os.path 하위 모듈에는 파일 경로와 함께 작동하도록 독점적으로 설계된 기능이 포함되어 있습니다. 이러한 모든 함수는 경로 인수를 문자열 또는 바이트로 허용하며 예를 들어 다음과 같이 절대 경로로 작업하도록 결정할 수 있습니다.

/home/daniel/.bashrc

또는 스크립트를 실행 중인 디렉터리에 따라 상대 경로를 사용합니다.

.bashrc
# Running the script in my home folder

다음은 내 테스트 파일이 있는 디렉토리에서 실행되는 os.path.exists() 함수를 사용하는 여러 예제입니다.

In [1]: import os

In [2]: os.path.exists('testfile.txt')
Out[2]: True

In [3]: os.path.exists('testdirectory')
Out[3]: True

In [4]: os.path.exists('hey-i-dont-exist')
Out[4]: False

보다시피 testfile.txt 파일과 testdirectory 폴더로 테스트할 때는 True를 반환하고 파일이 없으면 False를 반환합니다.

  사용할 DKIM 레코드 생성기 10가지

os.path.isfile()

파일(디렉토리가 아님)의 존재만 증명하려는 경우 os.path.isfile() 함수를 호출합니다.

In [1]: import os

In [2]: os.path.isfile('testfile.txt')
Out[2]: True

In [3]: os.path.isfile('testdirectory/')
Out[3]: False

In [4]: os.path.isfile('i-dont-even-exist')
Out[4]: False

In [5]: os.path.isfile('testdirectory/otherfile.txt')
Out[5]: True

참고: UNIX에서는 모든 디렉토리가 슬래시(/)로 끝나는 반면 Windows에서는 백슬래시()를 사용합니다.

위의 코드에서 isfile() 함수는 두 경우에 False를 반환합니다. 그 이유를 살펴보겠습니다.

  • testdirectory/는 디렉토리이므로 파일로 간주되지 않습니다. 이것은 Linux 이후로 절대적으로 사실이 아닙니다. 모든 것이 파일 설명자입니다.하지만 파이썬은 편의상 디렉토리를 다르게 취급합니다(디렉토리를 열려고 하면 IsADirectoryError가 발생합니다)
  • i-dont-even-exist는 아이러니하게도 존재하지 않는 파일을 가리키고 있습니다.

os.path.isdir()

디렉토리가 올바른 위치에 있는지 확인하려면 주어진 경로가 디렉토리를 가리키는 경우에만 True를 반환하는 os.path.isdir() 함수를 사용해야 합니다.

In [1]: import os

In [2]: os.path.isdir('testfile.txt')
Out[2]: False

In [3]: os.path.isdir('testdirectory')
Out[3]: True

In [4]: os.path.isdir('anotherfile.txt')
Out[4]: False

경로가 존재하는 파일을 가리키는 경우에도 위의 예에서 False를 반환하는 방법에 유의하십시오.

글로브

그만큼 덩어리 모듈은 함께 작동하는 기능을 제공합니다 유닉스 쉘과 같은 패턴 (따라서 Windows에서는 제대로 작동하지 않습니다.) 파일이 현재 디렉토리 내의 패턴과 일치하는지 확인하려면 다음을 사용할 수 있습니다. glob.glob() 기능.

In [1]: import glob

In [2]: glob.glob('testfile.txt')
Out[2]: ['testfile.txt']

In [3]: glob.glob('testdirectory')
Out[3]: ['testdirectory']

위의 코드에서 glob 함수에 전달된 패턴은 테스트 파일 및 디렉터리의 경로를 나타내는 일반 문자열입니다. 두 경로가 모두 존재하므로 함수는 내부에 일치하는 경로 이름이 있는 목록을 반환합니다.

참고: 패턴이 일치하지 않으면 빈 목록이 표시됩니다.

glob 함수에 패턴을 전달할 수 있다는 점을 고려할 때 주요 이점 중 일부를 테스트해 보는 것은 어떨까요?

아래 코드는 확장자가 각각 .txt 및 .py인 모든 파일 경로를 가져옵니다.

In [4]: glob.glob('*.txt')
Out[4]: ['testfile.txt']

In [5]: glob.glob('*.py')
Out[5]: 
['pathlib-exists.py',
 'list-dir.py',
 'glob-file.py',
 'open-except.py',
 'subprocess-test.py',
 'isfile.py',
 'exists.py',
 'isdir.py']

경로 클래스 사용

그만큼 경로 클래스 파일 경로를 개체로 사용할 수 있는 깔끔한 인터페이스를 제공하므로 경로를 사용하는 가장 좋은 방법 중 하나입니다.

케이크의 체리는 Path 인스턴스에 특정 경로에 대한 정보를 얻는 데 필요한 모든 메서드가 있다는 것입니다. 여기에는 이전 옵션과 유사한 기능이 포함됩니다.

  이번 시즌 구매해야 할 반지의 제왕(LOTR) 상품 11가지

참고: pathlib 라이브러리를 사용하려면 Python 3.4 이상이 필요합니다.

사용할 경로 방법:

경로가 존재하는지 확인

In [1]: from pathlib import Path

In [2]: Path('testfile.txt').exists()
Out[2]: True

In [3]: Path('im-not-here.txt').exists()
Out[3]: False

In [4]: Path('testdirectory').exists()
Out[4]: True

os.path.exists()와 동일하게 작동합니다.

경로가 파일을 가리키는지 확인

In [5]: Path('testfile.txt').is_file()
Out[5]: True

In [6]: Path('testdirectory').is_file()
Out[6]: False

os.path.isfile()과 동일합니다.

경로가 디렉토리를 가리키는지 확인

In [7]: Path('testfile.txt').is_dir()
Out[7]: False

In [8]: Path('testdirectory').is_dir()
Out[8]: True

os.path.isdir()에 해당합니다.

하위 프로세스

하위 프로세스 모듈 애호가라면 이 옵션에 대해 알아야 합니다. 다음을 사용하여 파일 또는 폴더가 존재하는지 확인할 수 있습니다. 테스트 명령.

참고: 테스트 명령은 Unix에서만 작동합니다.

다음 테스트 플래그는 작업을 완료합니다.

  • test -e: 경로가 존재하는지 확인
  • test -f: 파일이 존재하는지 확인
  • test-d: 폴더가 있는지 확인

더 많은 테스트 플래그에 대해 알아보려면 다음을 실행하여 설명서를 읽을 수 있습니다.

man test

하위 프로세스로 경로 확인:

아래 코드는 하위 프로세스의 반환 코드를 0과 비교하여 경로가 존재하는지 확인합니다.

Linux에서는 프로세스가 잘 진행되면 0을 반환하고 그렇지 않으면 다른 코드를 반환한다는 점을 기억하십시오.

In [1]: from subprocess import run

In [2]: run(['test', '-e', 'testfile.txt']).returncode == 0
Out[2]: True

In [3]: run(['test', '-e', 'im-not-here.txt']).returncode == 0
Out[3]: False

첫 번째 명령문에서 하위 프로세스 모듈을 가져온 다음 실행 기능 반환 코드를 가져옵니다.

하위 프로세스로 파일 존재 확인

In [4]: run(['test', '-f', 'testfile.txt']).returncode == 0
Out[4]: True

In [5]: run(['test', '-f', 'testdirectory']).returncode == 0
Out[5]: False

하위 프로세스로 디렉토리 확인:

In [6]: run(['test', '-d', 'testfile.txt']).returncode == 0
Out[6]: False

In [7]: run(['test', '-d', 'testdirectory']).returncode == 0
Out[7]: True

이 옵션은 더 많은 리소스를 소비하므로 사용하지 않는 것이 좋습니다. 이점이 없습니다.

요약하자면

Python은 OS와 상호 작용하여 프로세스를 자동화하는 데 가장 많이 사용되는 프로그래밍 언어 중 하나입니다. 이것으로 할 수 있는 한 가지 멋진 일은 파일이나 폴더가 존재하는지 확인하는 것입니다.

가장 간단한 방법은 다음과 같습니다.

  • 파일 예외 바로 열기 및 처리
  • os.path 또는 pathlib 모듈의 exists() 함수 사용.

이 자습서에서는 다음을 배웠습니다.

  • 파일이 존재하지 않는 경우 파일을 열고 예외를 처리하는 방법
  • 경로의 의미
  • 파일 또는 폴더의 존재를 확인하기 위해 os.path 하위 모듈이 제공하는 3가지 기능
  • Unix는 슬래시(/)를 사용하고 Windows는 백슬래시()를 사용합니다.

다음 읽기: Python에서 하위 프로세스란 무엇입니까? [5 Usage Examples]