etc./StackOverFlow

현재 디렉토리와 파일의 디렉토리 찾기 [중복]

청렴결백한 만능 재주꾼 2021. 11. 23. 03:44
반응형

질문자 :John Howard


Python에서 어떤 명령을 사용하여 찾을 수 있습니까?

  1. 현재 디렉토리(Python 스크립트를 실행할 때 터미널에 있었던 위치) 및
  2. 내가 실행하는 파일은 어디에 있습니까?


Python 파일이 포함된 디렉토리의 전체 경로를 얻으려면 해당 파일에 다음을 작성하십시오.

 import os dir_path = os.path.dirname(os.path.realpath(__file__))

os.chdir() 을 사용하여 현재 작업 디렉토리를 변경했다면 위의 주문은 작동하지 않을 것 __file__ 상수의 값은 현재 작업 디렉토리에 상대적이고 os.chdir() 호출)


현재 작업 디렉토리를 얻으려면 다음을 사용하십시오.

 import os cwd = os.getcwd()

위에서 사용된 모듈, 상수 및 함수에 대한 문서 참조:


Russell Dias

현재 작업 디렉토리 : os.getcwd()

그리고 __file__ 속성 은 실행 중인 파일의 위치를 찾는 데 도움이 될 수 있습니다. 이 스택 오버플로 게시물은 모든 것을 설명 합니다. Python에서 현재 실행된 파일의 경로를 얻으려면 어떻게 해야 합니까?


Nix

참조로 유용할 수 있습니다.

 import os print("Path at terminal when executing this file") print(os.getcwd() + "\n") print("This file path, relative to os.getcwd()") print(__file__ + "\n") print("This file full path (following symlinks)") full_path = os.path.realpath(__file__) print(full_path + "\n") print("This file directory and name") path, filename = os.path.split(full_path) print(path + ' --> ' + filename + "\n") print("This file directory only") print(os.path.dirname(full_path))

Daniel Reis

pathlib 모듈, 파이썬 3.4에 도입 ( PEP 428 - pathlib 모듈 - 객체 지향 파일 시스템 경로 ), 훨씬 더 나은 경로 관련 경험을합니다.

 pwd /home/skovorodkin/stack tree . └── scripts ├── 1.py └── 2.py

현재 작업 디렉토리를 얻으려면Path.cwd() 사용하십시오.

 from pathlib import Path print(Path.cwd()) # /home/skovorodkin/stack

스크립트 파일의 절대 경로를 얻으려면 Path.resolve() 메서드를 사용하세요.

 print(Path(__file__).resolve()) # /home/skovorodkin/stack/scripts/1.py

그리고 스크립트가있는 디렉토리 액세스의 경로 얻기 위해 .parent (그것은 호출에 추천 .resolve().parent ) :

 print(Path(__file__).resolve().parent) # /home/skovorodkin/stack/scripts

__file__ 은 어떤 상황에서는 신뢰할 수 없다는 것을 기억하십시오 : 파이썬에서 현재 실행된 파일의 경로를 어떻게 얻습니까? .


Path.cwd() , Path.resolve() 및 기타 Path 메서드는 문자열이 아닌 경로 개체( PosixPath open 내장 함수가 문자열 또는 바이트열 객체에서만 작동할 수 있고 Path 객체를 지원하지 않기 때문에 약간의 고통을 일으켰습니다 Path 객체를 문자열 Path.open() 메서드를 사용해야 했습니다. , 그러나 후자의 옵션을 사용하려면 이전 코드를 변경해야 합니다.

파일 스크립트/2.py

 from pathlib import Path p = Path(__file__).resolve() with p.open() as f: pass with open(str(p)) as f: pass with open(p) as f: pass print('OK')

산출

 python3.5 scripts/2.py Traceback (most recent call last): File "scripts/2.py", line 11, in <module> with open(p) as f: TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')

보시다시피 open(p) 은 Python 3.5에서 작동하지 않습니다.

PEP 519 — Python 3.6에서 구현된 파일 시스템 경로 프로토콜을 추가하면 PathLike 객체 open 함수에 추가되므로 이제 Path 객체를 open 함수에 직접 전달할 수 있습니다.

 python3.6 scripts/2.py OK

skovorodkin

  1. 현재 디렉토리 전체 경로를 얻으려면

     >>import os >>print os.getcwd()

    출력: "C :\Users\admin\myfolder"

  2. 현재 디렉토리 폴더 이름만 가져오려면

     >>import os >>str1=os.getcwd() >>str2=str1.split('\\') >>n=len(str2) >>print str2[n-1]

    출력: "myfolder"


vinithravit

현재 있는 파일의 현재 디렉토리를 찾으려는 경우:

OS 불가지론적 방식:

 dirname, filename = os.path.split(os.path.abspath(__file__))

Kurt

Python 3.4를 사용하는 경우 pathlib.Path.cwd() 를 편리하게 호출하여 다른 많은 새로운 기능과 함께 현재 작업 디렉토리를 나타내는 Path 객체를 가져올 수 있는 pathlib

이 새로운 API에 대한 자세한 정보는 여기 에서 찾을 수 있습니다.


Jazzer

Pathlib 를 사용하여 현재 스크립트가 포함된 디렉토리를 가져올 수 있습니다.

 import pathlib filepath = pathlib.Path(__file__).resolve().parent

Mathieu C.

현재 디렉토리 전체 경로를 얻으려면:

 os.path.realpath('.')

Ilia S.

#1에 대한 답변:

현재 디렉토리를 원하면 다음을 수행하십시오.

 import os os.getcwd()

폴더 이름만 원하고 해당 폴더에 대한 경로가 있는 경우 다음을 수행하십시오.

 def get_folder_name(folder): ''' Returns the folder name, given a full folder path ''' return folder.split(os.sep)[-1]

#2에 대한 답변:

 import os print os.path.abspath(__file__)

Blairg23

현재 실행 컨텍스트의 이름을 찾는 가장 간결한 방법은 다음과 같습니다.

 current_folder_path, current_folder_name = os.path.split(os.getcwd())

StormShadow

현재 실행된 스크립트의 위치를 검색하는 경우 sys.argv[0] 을 사용하여 전체 경로를 얻을 수 있습니다.


Grochni

질문 1의 경우, os.getcwd() # Get working directoryos.chdir(r'D:\Steam\steamapps\common') # Set working directory


sys.argv 는 변경할 수 없으므로 항상 현재 파일(모듈 개체 경로)을 반환하고 os.chdir() 영향을 받지 않기 때문에 질문 2에 sys.argv[0] 을 사용하는 것이 좋습니다. 또한 다음과 같이 할 수 있습니다.

 import os this_py_file = os.path.realpath(__file__) # vvv Below comes your code vvv #

그러나 그 스니펫과 sys.argv[0] 은 작동하지 않거나 PyInstaller로 컴파일할 때 이상하게 작동합니다. 마술 속성이 __main__ 수준 sys.argv[0] 이 실행 파일이 호출된 방식이기 때문입니다(즉, 작업 디렉토리의 영향을 받습니다.)


Kotauskas

출처 : http:www.stackoverflow.com/questions/5137497/find-the-current-directory-and-files-directory

반응형