답변:
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
이미 절대 경로 인 경우에도 작동합니다.
>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
normpath()
다음과 같이 함수를 호출하는 것과 같습니다 normpath(join(os.getcwd(), path))
. 따라서 mydir/myfile.txt
아래에 있지 않으면 os.getcwd()
절대 경로는 실제 경로 가 아닙니다 .
mydir/myfile.txt
, 현재 작업 디렉토리 내부의 경로를 암시 적으로 참조합니다 ./mydir/myfile.txt
. 그것은 입력하려는 경로가 아닐 수도 있지만 내가 알 수있는 한 경로를 올바르게 해석하는 것처럼 보입니다. 좀 더 자세히 설명해 주시겠습니까?
abspath
함수에 대한 인수 와 실제 파일 사이에는 연관성이 없다고 말할 것 입니다. 존재하지 않는 파일 이름과 디렉토리 계층 구조를 지정하면 경로가 간단하게 경로의 비트 (부모 디렉토리 " ..
"요소 포함)를 확인하고 문자열을 반환합니다. 이것은 현재 디렉토리에서 계산 된 문자열입니다. 실제 파일과의 상관 관계는 우연히 보입니다. 시도하십시오 os.path.abspath("/wow/junk/../blha/hooey")
. 효과가있다.
os.path.exists
. 반대로 표준 경로 확인 기능이있는 기존 경로를 요구하는 PowerShell과 같은 시스템은 사용하기가 어렵습니다.
relpath
"파일 시스템이 존재 또는 본질을 확인하기 위해 액세스되지 않습니다"라는 명시 적 path
입니다. 여기서 논쟁이 명백하다면 왜 명시 적이어야 relpath
하는가?
새로운 Python 3.4 라이브러리를 사용할 수 있습니다 pathlib
. (당신은 또한 사용하여 파이썬 2.6 또는 2.7을 얻을 수 있습니다 pip install pathlib
.) 저자는 썼다 : ".이 라이브러리의 목적은 핸들 파일 시스템 경로와 사용자가 그들을 수행 일반적인 작업에 클래스의 간단한 계층 구조를 제공하는 것입니다"
Windows에서 절대 경로를 얻으려면
>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'
또는 UNIX의 경우 :
>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'
문서는 다음과 같습니다. https://docs.python.org/3/library/pathlib.html
os.path.abspath()
하면 오류가 발생했습니다. AttributeError: 'NoneType' object has no attribute 'startswith'
, 사용 Path().resolve()
하면 동일한 상대 파일 경로가 아닙니다. (Linux 및 Python3.4)
더 나은 방법으로, 모듈 (에있는 PyPI
)을 설치 os.path
하면 문자열이 사용되는 모든 곳에서 사용할 수있는 객체의 메소드로 모든 기능 및 기타 관련 기능을 래핑합니다 .
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
pathlib
. 이 글에서 나의 대답을보십시오.
from path import Path
다음Path('mydir/myfile.txt').abspath()
path
. 다른 모듈을 사용했을 수 있습니다 . 연결된 모듈은이라는 클래스를 사용합니다 path
.
오늘 당신은 또한 다음 unipath
을 기반으로 한 패키지를 사용할 수 있습니다 path.py
: http://sluggo.scrapping.cc/python/unipath/
>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>
이 패키지는 일반적인 os.path 유틸리티에 깔끔한 인터페이스를 제공 하므로이 패키지를 사용하는 것이 좋습니다 .
pathlib
실제로 질문에 대답하는 Python 3.4 이상 업데이트 :
from pathlib import Path
relative = Path("mydir/myfile.txt")
absolute = relative.absolute() # absolute is a Path object
임시 문자열 만 필요한 경우 다음을 포함 Path
하여 관련 기능이 모두 포함 된 객체를 사용할 수 있습니다 .os.path
abspath
from os.path import abspath
absolute = abspath(relative) # absolute is a str object
이것은 항상 이 다른 스크립트 내에서 호출 된 경우에도, 현재 스크립트의 오른쪽에 파일 이름을 가져옵니다. 를 사용할 때 특히 유용합니다 subprocess
.
import sys,os
filename = sys.argv[0]
거기에서 다음을 사용하여 스크립트의 전체 경로를 얻을 수 있습니다.
>>> os.path.abspath(filename)
'/foo/bar/script.py'
또한 /..
디렉토리 계층에서 '위로'이동하려는 횟수만큼 추가하여 폴더를 쉽게 탐색 할 수 있습니다.
암호를 얻으려면 :
>>> os.path.abspath(filename+"/..")
'/foo/bar'
부모 경로의 경우 :
>>> os.path.abspath(filename+"/../..")
'/foo'
"/.."
다른 파일 이름과 결합 하면 시스템의 모든 파일에 액세스 할 수 있습니다.
모듈 os
은 abs 경로를 찾는 방법을 제공합니다.
그러나 Linux에서 대부분의 경로는 ~
(물결표)로 시작 하므로 만족스러운 결과를 얻지 못합니다.
사용할 수 있습니다 srblib
.
>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'
사용하여 설치 python3 -m pip install srblib
나는 글로브를 선호합니다
현재 폴더의 모든 파일 형식을 나열하는 방법은 다음과 같습니다.
import glob
for x in glob.glob():
print(x)
현재 폴더에있는 모든 .txt 파일을 나열하는 방법은 다음과 같습니다.
import glob
for x in glob.glob('*.txt'):
print(x)
선택한 디렉토리에 모든 파일 유형을 나열하는 방법은 다음과 같습니다.
import glob
for x in glob.glob('C:/example/hi/hello/'):
print(x)
이것이 당신에게 도움이 되었기를 바랍니다
os.path.abspath()
상대 경로가 glob
제공 하는 모든 것에 정답 ( )을 적용 할 수 있습니다 .