참고
import os 관련
import sys 관련
https://docs.python.org/ko/3/library/sys.html
rfind 관련( 파이썬내장lib임 )
https://hyunssssss.tistory.com/365
import os
import sys
path = os.path.abspath(os.path.dirname(sys.argv[0]))
sys.path.append(path[:path.rfind('/')])
치팅시트
현장에서 쓰는 os 정리
ex)
이런식으로

tree -d

범주 | 입력 | 출력 | 설명 |
os.sep | '/' | ||
os.getenv | str(os.getenv("HOME")) | '/home/liam' | |
os.scandir | |||
os.remove | |||
os.mkdir | |||
os.popen | |||
os.system | os.system("rm -r osmk") | 0 | ""에 들어간 명령어 실행 |
os.environ.get | 운영 체제에 등록되어 있는 모든 환경 변수 | ||
os.environ | |||
os.path.join(os.path.abspath(os.path.dirname(sys.argv[0]))) <- os.path.~~~ 따로 정리
os.path.exists | ||
os.path.isdir | ||
os.path.dirname | ||
os.path.abspath | ./test가 있는 곳의 절대경로(pwd)얻기 |
os 관련
현재 작업 폴더 얻기 | os.getcwd() # "C:\Temp" |
디렉토리 변경 | os.chdir("C:\Tmp") |
특정 경로에 대해 절대 경로 얻기 | os.path.abspath(".\\Scripts") # "C:\Python35\Scripts" |
경로 중 디렉토리명만 얻기 | os.path.dirname("C:/Python35/Scripts/pip.exe") # "C:/Python35/Scripts" |
경로 중 파일명만 얻기 | if os.path.isfile("C:/Python35/Scripts/pip.exe"): print(os.path.basename("C:/Python35/Scripts/pip.exe")) # "pip.exe" |
경로 중 디렉토리명과 파일명을 나누어 얻기 | dir, file = os.path.split("C:/Python35/Scripts/pip.exe") |
파일 각 경로를 나눠 리스트로 리턴하기 os.path.sep은 OS별 경로 분리자 |
"C:\Python35\Scripts\pip.exe".split(os.path.sep) # ['C:', 'Python35', 'Scripts', 'pip.exe'] |
경로를 병합하여 새 경로 생성 | os.path.join('C:\Tmp', 'a', 'b') # "C:\Tmp\a\b" |
디렉토리 안의 파일/서브디렉토리 리스트 | os.listdir("C:\Python35") |
파일 혹은 디렉토리 경로가 존재하는지 체크하기 | os.path.exists("C:\Python35") |
디렉토리 경로가 존재하는지 체크하기 | os.path.isdir("C:\Python35") |
파일 경로가 존재하는지 체크하기 | os.path.isfile("C:\Python35\python.exe") |
파일의 크기 | os.path.getsize("C:\Python35\python.exe") |
sys 관련
sys.path | 실행되는 스크립트와 종속관계인 dir을 리스트 형식으로 전부 나타내줌, 따라서 sys.path[0] 은 본인스크립트가 있는 디렉터리 절대경로가 있다(pwd명령어랑 같은 결과) |
ex) 자주쓰는 예
path = os.path.abspath(os.path.dirname(sys.argv[0]))
간략설명
sys.argv[0] : 현재 실행된 코드명 현재 코드가 실행된 dir path 구하기
os.path.abspath(os.path.dirname(sys.argv[0])) :
os.path.dirname(sys.argv[0]) | 현재 실행된 코드명이 있는 곳의 "dirname"구하기 |
os.path.abspath("./test") | ./test가 있는 곳의 절대경로(pwd)얻기 |
os.path.abspath(os.path.dirname(sys.argv[0])) : 현재 실행된 코드의 dirname 과 dirname 의 절대경로
sys.path.append(path[:path.rfind('/')]) : path(str)변수에서 마지막 '/'이 있는 부분까지의 path를 'sys.path'마지막 요소에 붙임
sys.path[-1] <- 이거로 현재 실행된코드의 "../"위 dirname 절대경로를 출력가능함
결론 : 현재 코드가 실행된 dirname의 "../" path 구하기
ex) 코드 현재위치의 상위 폴더 경로 구하기
#!/usr/bin/python
# -*- coding: utf-8 -*-
###
# @file mdul_sound_manager.py
# @brief 사운드 출력
# @section
import os
import sys
print(sys.path)
print("------------------------------------------- ")
print(" ")
#----------------------------------------------------------------
# local 테스트 진행 시
# 현재위치의 상대경로를 시스템에서 인식시켜주기 위한 작업
path = os.path.abspath(os.path.dirname(sys.argv[0]))
#----------------------------------------------------------------
print("------------------------------------------- ")
print(" ")
print(path)
print(type(path))
print("------------------------------------------- ")
print(" ")
print(sys.argv[0])
print("------------------------------------------- ")
print(" ")
print(path.rfind('/'))
print(sys.path[-1])
print(sys.path.append(path[:path.rfind('/')]))
print("------------------------------------------- ")
print(" ")
print("=========sys.path append result========= ")
print(sys.path[-1])
print("------------------------------------------- ")
print(" ")
print(sys.path)

결과

ex) 코드 현재위치의 상위 폴더 경로 구하고 python path에 추가하기 ( __iter__() 함수를 사용해서 할 경우 )
import os,sys
path = os.path.abspath(os.path.dirname(sys.argv[0]))
path_iter = path.__iter__()
path_prev = ''
for i in range(0,path.rfind('/')):
path_prev += ''.join(path_iter.__next__())
print(sys.path)
sys.path.append(path_prev)
print('---------------------------------------------------------')
print(sys.path)


'리눅스 관련 > 시스템(sys,os)lib,리눅스 lib' 카테고리의 다른 글
scp 정리 (0) | 2022.05.27 |
---|---|
vlc_정리 (0) | 2022.05.11 |
댓글