"/", "\"?를 사용하는 플랫폼 독립 경로 연결
파이썬에서 나는 변수가 있습니다.base_dir
그리고.filename
나는 그것들을 연결해서 얻고 싶습니다.fullpath
하지만 창문 아래에서는 사용해야 합니다.\
POSIX의 경우/
.
fullpath = "%s/%s" % ( base_dir, filename ) # for Linux
어떻게 하면 이 플랫폼을 독립적으로 만들 수 있습니까?
이를 위해 os.path.join()을 사용하려고 합니다.
문자열 연결 등이 아닌 이것을 사용하는 장점은 경로 구분 기호와 같은 다양한 OS 관련 문제를 인식한다는 것입니다.예:
import os
Windows 7에서:
base_dir = r'c:\bla\bing'
filename = r'data.txt'
os.path.join(base_dir, filename)
'c:\\bla\\bing\\data.txt'
Linux 아래:
base_dir = '/bla/bing'
filename = 'data.txt'
os.path.join(base_dir, filename)
'/bla/bing/data.txt'
OS 모듈에는 os.sep를 통해 경로에 사용되는 구분자와 같이 디렉토리, 경로 조작 및 OS 관련 정보를 찾는 데 유용한 많은 방법이 포함되어 있습니다.
사용:
import os
fullpath = os.path.join(base_dir, filename)
os.path 모듈에는 플랫폼 독립적인 경로 조작에 필요한 모든 방법이 포함되어 있지만, 현재 플랫폼에서 사용할 수 있는 경로 구분 기호가 무엇인지 알아야 하는 경우가 있습니다.
여기서는 오래된 질문을 파헤치지만 Python 3.4+에서는 pathlib 연산자를 사용할 수 있습니다.
from pathlib import Path
# evaluates to ./src/cool-code/coolest-code.py on Mac
concatenated_path = Path("./src") / "cool-code\\coolest-code.py"
잠재적으로 더 읽기 쉽습니다.os.path.join()
최신 버전의 Python을 실행할 수 있는 운이 좋은 경우.그러나 경직된 환경이나 레거시 환경에서 코드를 실행해야 하는 경우 이전 버전의 Python과의 호환성도 무시할 수 있습니다.
import os
path = os.path.join("foo", "bar")
path = os.path.join("foo", "bar", "alice", "bob") # More than 2 params allowed.
이를 위해 도우미 클래스를 만들었습니다.
import os
class u(str):
"""
Class to deal with urls concat.
"""
def __init__(self, url):
self.url = str(url)
def __add__(self, other):
if isinstance(other, u):
return u(os.path.join(self.url, other.url))
else:
return u(os.path.join(self.url, other))
def __unicode__(self):
return self.url
def __repr__(self):
return self.url
용도:
a = u("http://some/path")
b = a + "and/some/another/path" # http://some/path/and/some/another/path
감사합니다.fbs 또는 pyinstaller 및 frozen 앱을 사용하여 이를 보는 다른 사람을 위한 것입니다.
저는 이제 완벽하게 작동하는 아래를 사용할 수 있습니다.
target_db = os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])), "sqlite_example.db")
전에 이런 추잡한 짓을 하고 있었는데, 그건 분명히 이상적이지 않았습니다.
if platform == 'Windows':
target_db = (os.path.abspath(os.path.dirname(sys.argv[0])) + "\\" + "sqlite_example.db")
if platform == 'Linux' or 'MAC':
target_db = (os.path.abspath(os.path.dirname(sys.argv[0])) + "/" + "sqlite_example.db")
target_db_path = target_db
print(target_db_path)
언급URL : https://stackoverflow.com/questions/10918682/platform-independent-path-concatenation-using
'programing' 카테고리의 다른 글
스크립트를 실행할 때 스크립트에 1064 오류가 발생하는 이유는 무엇입니까? (0) | 2023.07.23 |
---|---|
Ionic 5 또는 캐패시터 5로 업그레이드한 후 TypeScript 컴파일에서 src/zone-flags.ts가 누락됨 (0) | 2023.07.23 |
Windows에서 Cmake (0) | 2023.07.23 |
여러 레코드 INSERT 문에 사용되는 MySQL LAST_INSERT_ID() (0) | 2023.07.23 |
파이어베이스InstanceIdService가 더 이상 사용되지 않습니다. (0) | 2023.07.23 |