programing

open()에서 FileNotFoundError / IOError: '[Errno 2] 해당 파일 또는 디렉터리가 없습니다.'

javamemo 2023. 8. 23. 21:32
반응형

open()에서 FileNotFoundError / IOError: '[Errno 2] 해당 파일 또는 디렉터리가 없습니다.'

.recentlyUpdated.yaml내 파이썬 스크립트에서.하지만 사용해 보면 다음과

open('recentlyUpdated.yaml')

다음과 같은 오류가 표시됩니다.

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'

왜요? 어떻게 하면 문제를 해결할 수 있을까요?

  • 확장자가 합니다. : 파os.listdir()현재 작업 디렉토리에 있는 파일 목록을 확인합니다.
  • 다을사여예상있에는확인다니합지리토를 사용하여 예상되는 합니다.os.getcwd().
    IDE에서 코드를 실행하면 다른 디렉토리에 있을 수 있습니다.
  • 그러면 다음 중 하나를 수행할 수 있습니다.
    • os.chdir(dir)dir파일이 들어 있는 디렉터리입니다.그런 다음 파일 이름만 사용하여 파일을 엽니다.open("file.txt").
    • 를 지정합니다.open콜.콜.
  • 원시 문자열 사용(r""경로에서 백슬래시를 사용하는 경우 다음과 같습니다.dir = r'C:\Python32'
    • raw , 백슬래시를 .'C:\\User\\Bob\\...'
    • 전진 에서도 작동합니다.'C:/Python32'탈출할 필요는 없습니다

Python이 파일을 찾는 방법을 설명하겠습니다.

  • 절대 경로는 시스템의 루트 디렉터리로 시작하는 경로입니다.C:\Python\scriptsWindows(윈도우)를 사용하는 경우.
  • 상대 경로는 컴퓨터의 루트 디렉터리로 시작하지 않고 대신 작업 디렉터리라는 것에 상대적인 경로입니다.Python의 현재 작업 디렉터리를 볼 수 있습니다.os.getcwd().

당신이 하려고 한다면,open('sortedLists.yaml')Python은 사용자가 상대 경로를 전달하고 있음을 확인하여 현재 작업 디렉터리 내에서 파일을 검색합니다.

하기 르기os.chdir()현재 작업 디렉터리를 변경합니다.

설정:file.txt에서 찾을 수 있습니다.C:\Folder.

열기 위해 다음 작업을 수행할 수 있습니다.

os.chdir(r'C:\Folder')
open('file.txt') # relative path, looks inside the current working directory

또는

open(r'C:\Folder\file.txt') # absolute path

대부분의 경우 상대 파일 경로를 사용하여 파일을 열지만 현재 작업 디렉터리가 사용자가 생각하는 것으로 설정되지 않은 것이 문제입니다.

상대 경로가 파이썬 스크립트의 위치와 관련이 있다는 것은 일반적인 오해이지만, 이것은 사실이 아닙니다.상대 파일 경로는 항상 현재 작업 디렉터리에 상대적이며, 현재 작업 디렉터리가 python 스크립트의 위치일 필요는 없습니다.

세 가지 옵션이 있습니다.

  • 절대 경로를 사용하여 파일을 엽니다.

    file = open(r'C:\path\to\your\file.yaml')
    
  • python 스크립트와 관련된 파일 경로를 생성합니다.

    from pathlib import Path
    
    script_location = Path(__file__).absolute().parent
    file_location = script_location / 'file.yaml'
    file = file_location.open()
    

    (참고:현재 실행 중인 파일의 경로와 이름을 가져오려면 어떻게 해야 합니까?)

  • 파일을 열기 전에 현재 작업 디렉토리를 변경합니다.

    import os
    
    os.chdir(r'C:\path\to\your\file')
    file = open('file.yaml')
    

"file not found(파일을 찾을 수 없음)" 오류를 발생시킬 수 있는 다른 일반적인 오류는 다음과 같습니다.

  • 파일 경로에서 실수로 이스케이프 시퀀스 사용:

    path = 'C:\Users\newton\file.yaml'
    # Incorrect! The '\n' in 'Users\newton' is a line break character!
    

    이러한 실수를 방지하려면 파일 경로에 원시 문자열 리터럴을 사용해야 합니다.

    path = r'C:\Users\newton\file.yaml'
    # Correct!
    

    (참고:Python의 윈도우즈 경로)

  • Windows에서 파일 확장명을 표시하지 않음:

    파일 확장자를 하지 않기 에 파일 이름이 (윈도우)라고 .file.yaml실제로는 이름이 붙었습니다.file.yaml.yaml파일 확장명을 다시 확인합니다.

파일이 존재할 수 있지만 경로가 다를 수 있습니다.파일의 절대 경로를 작성해 보십시오.

ㅠㅠos.listdir()적어도 파이썬이 파일을 볼 수 있는지 확인하는 기능.

다음과 같이 사용해 보십시오.

file1 = open(r'Drive:\Dir\recentlyUpdated.yaml')

'file1'을수 .
플래그를 사용하면 : "새파일 을 만 'w' 래

file1 = open('recentlyUpdated.yaml', 'w')

mode는 파일을 여는 모드를 지정하는 선택적 문자열입니다.기본값은 텍스트 모드에서 읽기 위해 열려 있음을 의미하는 'r'입니다.다른 일반적인 값은 쓰기를 위한 'w'입니다(파일이 이미 있는 경우 잘라내기)...

(https://docs.python.org/3/library/functions.html?highlight=open#open) 참조)

절대 경로 및 상대 경로 이해

경로라는 용어는 정확히 그것이 어떻게 들리는지를 의미합니다.파일을 찾기 위해 폴더에 들어가거나 폴더에서 나가거나 해야 하는 단계를 보여줍니다.경로의 각 단계는 폴더 이름, 특수 이름입니다..폴더를 함) 한 이름 (현재폴더의미함를이)..(즉, 부모 폴더로 돌아가거나 나가는 것입니다.)

절대적이고 상대적인 용어는 또한 그들의 일반적인 영어 의미를 가지고 있습니다.상대 경로는 어떤 것이 시작점에 상대적인 위치를 나타냅니다. 절대 경로는 위에서 시작하는 위치입니다.

경로 구분 기호로 시작하는 경로 또는 드라이브 문자 뒤에 경로 구분 기호(예:C:/fooWindows의 경우 절대 경로입니다. (Windows의 경우 UNC 경로도 반드시 절대 경로여야 합니다.)대부분의 사람들은 이것에 대해 걱정할 필요가 없습니다.)

이름으로 또는 또는 폴더 이름이 경로(예:C:foo는에서 상대적입니다

"현재 작업 디렉토리"

상대 경로는 이른바 현재 작업 디렉터리(이하 CWD)와 "상대적"입니다.명령줄에서 Linux와 Mac은 모든 드라이브에서 공통 CWD를 사용합니다.(전체 파일 시스템에는 공통 "루트"가 있으며 여러 물리적 스토리지 장치가 포함될 수 있습니다.)Windows는 각 드라이브의 최신 CWD를 기억하고 있으며 드라이브 간에 전환하여 이전 CWD 값을 복원하는 별도의 기능이 있습니다.

각 프로세스(터미널/명령 창 포함)에는 고유한 CWD가 있습니다.명령줄에서 프로그램을 시작하면 터미널/명령 프로세스에서 사용하던 CWD를 가져옵니다.프로그램을 GUI에서 시작할 때(스크립트를 두 번 클릭하거나 스크립트에 무언가를 끌어다 놓거나 Python 실행 파일로 끌어다 놓음) 또는 IDE를 사용하여 CWD가 세부 사항에 따라 여러 가지가 될 수 있습니다.

중요한 것은 CWD가 반드시 스크립트가 있는 위치에 있는 것은 아니라는 점입니다.

스크립트의 CWD는 를 사용하여 확인하고 를 사용하여 수정할 수 있습니다. 각 IDE는 초기 CWD를 제어하는 자체 규칙을 가지고 있습니다. 자세한 내용은 설명서를 참조하십시오.

CWD를 현재 스크립트가 포함된 폴더로 설정하려면 해당 경로를 확인한 다음 설정합니다.

os.chdir(os.path.dirname(os.path.abspath(__file__)))

실제 파일 이름 및 경로 확인

  • 파일 경로가 예상과 일치하지 않는 이유는 여러 가지가 있습니다.예를 들어 Windows(윈도우)에서 "바탕 화면에 이름이 지정된 파일"을 의미하는 경우가 있습니다.이는 잘못되었다.그 파일은 실제로 - 보통 - 에 있습니다.C:/Users/name/Desktop/foo.txt)로 표시됩니다.name현재 사용자의 사용자 이름으로).Windows(윈도우)가 다른 곳에 배치하도록 구성된 경우 대신 다른 곳에 있을 수 있습니다.휴대용 방법으로 바탕 화면에 대한 경로를 찾으려면 바탕 화면 위치를 가져오는 방법을 참조하십시오.

    잘못 세는 것도 흔한 일입니다...s가 상대 경로에 있거나 경로에 폴더 이름을 부적절하게 반복합니다.경로를 프로그래밍 방식으로 구성할 때는 특히 주의해야 합니다.마지막으로, 명심하세요...디렉터리에 을 주지 (" 트디 리이있에동않루미영다습니치지향을아무런는에안렉는미터▁will▁have다않니루")./(Linux 또는 Mac의 경우) 또는 Windows의 경우 드라이브 루트).

    사용자 입력에 따라 경로를 구성할 때는 더욱 주의해야 합니다.입력을 검사하지 않으면 나쁜 일이 발생할 수 있습니다(예: 사용자가 중요한 내용을 덮어쓰거나 사용자가 파일을 쓸 수 없도록 하는 폴더에 파일 압축을 풀 수 있음).

  • 또 다른 공통점은 특별한 것입니다.~현재 사용자의 홈 디렉터리에 대한 바로 가기가 Python 프로그램에 지정된 절대 경로에서 작동하지 않습니다.경로의 해당 부분은 다음을 사용하여 실제 경로로 명시적으로 변환해야 합니다.os.path.expanduserpython에서 os.path.expanduser를 강제로 사용하는 이유참조하십시오. os.makedirs는 내 경로에서 "~"를 이해하지 못합니다.

  • 을 명심하세요.os.listdir 경로가 아닌 파일 이름지정합니다.이 방법으로 나열된 디렉토리를 반복하려고 하면 해당 디렉토리가 현재 작업 디렉토리인 경우에만 작동합니다.

  • 실제 파일 이름을 확인하는 것도 중요합니다.Windows에는 GUI에서 파일 이름 확장명을 숨길 수 있는 옵션이 있습니다. 보이면,foo.txt창에서 파일의 실제 이름은foo.txt.txt아니면 다른 것.설정에서 이 옵션을 사용하지 않도록 설정할 수 있습니다..dir폴더에 있는 내용에 대한 진실을 알려줄 것입니다.(Linux/Mac에 해당하는 것은ls물론입니다; 하지만 문제는 애초에 거기서 발생해서는 안 됩니다.)

  • 일반 문자열의 백슬래시는 이스케이프 시퀀스입니다.이로 인해 Windows에서 경로 구분자로 백슬래시를 시도할 때 문제가 발생합니다.그러나 이를 위해 백슬래시를 사용할 필요는 없으며 일반적으로 권장되지 않습니다.Windows 경로를 Python 문자열 리터럴로 쓰는 방법을 참조하십시오.

  • 다음과 같은 파일 모드를 사용하여 파일을 생성하려고 할 때w새 파일에 대한 경로(즉, 모든 중간 폴더)가 여전히 존재해야 합니다.를 참조하십시오. open(파일 이름, 'w')을 사용하려고 하면 IO 오류가 나타납니다. [Errno 2] 디렉터리가 없으면 해당 파일 또는 디렉터리가 없습니다.또한 새 파일 이름은 유효해야 합니다.특히, 날짜를 삽입하려고 해도 작동하지 않습니다.MM/DD/YYYY합니다. 파일 이름/s는 경로 구분 기호로 처리됩니다.

VSCode인 경우 워크스페이스를 참조하십시오.다른 작업 공간에 있는 경우 이 오류가 발생할 수 있습니다.

언급된 경로가 절대 경로인지 상대 경로인지 확인합니다.

에 -- 약그것이와--> 같것면라이은만-->./folder/subfolder/file가 루트 --> 디렉터리에서 폴더를 검색합니다.

에 --> 만약그이것--> 같것면라이은와-->▁like../folder/subfolder/file는 현재 디렉토리에 --> 컴퓨가현에서폴검더다니색합를.

IDE를 VScode와 같이 사용하는 경우 액세스할 파일을 보관하고 있는 동일한 디렉토리에서 IDE를 열었는지 확인합니다.

예를 들어 파일에 액세스하려는 경우.문서 내부에 있는 txt, 디렉토리에서 마우스 오른쪽 단추를 누른 후 "열기"를 눌러 문서에서 IDE를 엽니다.

(Pycharm의 경우)

Pycharm에는 기본 제공 "Active Directory" 설정이 있습니다.

이 설정이 업데이트되지 않았기 때문에 폴더 이름을 변경할 때 이 오류가 발생할 수 있습니다.Pycharm에서 이 오류를 해결하려면 "Edit Configurations"(실행 버튼 옆 창의 오른쪽 상단)를 선택합니다.

Picture of "Edit Configurations"

그런 다음 스크립트 경로와 작업 디렉토리 폴더를 모두 변경합니다.

enter image description here

언급URL : https://stackoverflow.com/questions/12201928/open-gives-filenotfounderror-ioerror-errno-2-no-such-file-or-directory

반응형