programing

파이썬에서 절대 파일 경로를 얻는 방법

nasanasas 2020. 10. 2. 22:32
반응형

파이썬에서 절대 파일 경로를 얻는 방법


와 같은 경로가 주어지면 "mydir/myfile.txt"Python의 현재 작업 디렉토리에 상대적인 파일의 절대 경로를 어떻게 찾습니까? 예를 들어 Windows에서는 다음과 같이 끝날 수 있습니다.

"C:/example/cwd/mydir/myfile.txt"

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

새로운 Python 3.4 라이브러리를 사용할 수 있습니다 pathlib. (또한를 사용하여 Python 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


>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>> 

더 좋은 방법은 모듈 (에서 찾았 음)을 설치하는 PyPI것입니다. 모든 os.path함수 및 기타 관련 함수를 문자열이 사용되는 모든 곳에서 사용할 수있는 객체의 메서드로 래핑합니다 .

>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>

오늘 당신은 또한 사용할 수 있습니다 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.pathabspath

from os.path import abspath

absolute = abspath(relative)  # absolute is a str object

import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))

Note that expanduser is necessary (on Unix) in case the given expression for the file (or directory) name and location may contain a leading ~/(the tilde refers to the user's home directory), and expandvars takes care of any other environment variables (like $HOME).


Module os provides a way to find abs path.

BUT most of the paths in Linux start with ~ (tilde), which doesn't give a satisfactory result.

so you can use srblib for that.

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

install it using python3 -m pip install srblib

https://pypi.org/project/srblib/


I prefer to use glob

here is how to list all file types in your current folder:

import glob
for x in glob.glob():
    print(x)

here is how to list all (for example) .txt files in your current folder:

import glob
for x in glob.glob('*.txt'):
    print(x)

here is how to list all file types in a chose directory:

import glob
for x in glob.glob('C:/example/hi/hello/'):
    print(x)

hope this helped you


if you are on a mac

import os
upload_folder = os.path.abspath("static/img/users")

this will give you a full path:

print(upload_folder)

will show the following path:

>>>/Users/myUsername/PycharmProjects/OBS/static/img/user

In case someone is using python and linux and looking for full path to file:

>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file

This always gets the right filename of the current script, even when it is called from within another script. It is especially useful when using subprocess.

import sys,os

filename = sys.argv[0]

from there, you can get the script's full path with:

>>> os.path.abspath(filename)
'/foo/bar/script.py'

It also makes easier to navigate folders by just appending /.. as many times as you want to go 'up' in the directories' hierarchy.

To get the cwd:

>>> os.path.abspath(filename+"/..")
'/foo/bar'

For the parent path:

>>> os.path.abspath(filename+"/../..")
'/foo'

By combining "/.." with other filenames, you can access any file in the system.


filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)

참고URL : https://stackoverflow.com/questions/51520/how-to-get-an-absolute-file-path-in-python

반응형