language/Python

[Python] OS, sys, glob 모듈 개념, 활용 예제

스파이디웹 2022. 3. 3. 13:22
728x90

1. OS 모듈

환경 변수나 디렉터리, 파일 등의 OS 자원을 제어할 수 있게 해주는 모듈

1) 내 시스템의 환경 변수를 알고 싶을 때

print(os.environ)


2) 현재 디렉토리 출력

print(os.getcwd())


3) 현재 디렉토리 이동

#현재 디렉토리 이동
os.chdir("C:/spark/spark-3.1.2-bin-hadoop2.7")

#현재 디렉토리 확인
print(os.getcwd())


4) 파일 객체 읽기

#실행한 시스템 명령어의 결괏값 돌려받기 - os.popen
#os.popen은 시스템 명령어를 실행한 결괏값을 읽기 모드 형태의 파일 객체로 돌려준다.
f = os.popen("test.txt")
#읽어들인 파일 객체의 내용 보기
print(f.read())


5) 모든 파일, 폴더명 리스트로 반환

#입력 경로 내의 모든 파일과 폴더명 리스트 반환
#직접 경로를 주어도 된다.
dir_list = os.listdir(".")
print(dir_list)


6) 모든 경로의 하위 디렉토리,파일,path출력

#인자로 받은 모든 경로에 대해 모든 하위 디렉토리 출력
for path, direct, files in os.walk("."):#현재 디렉토리의 인자로 받은 모든 하위 디렉토리 출력
    print(path)

"." : 현재 디렉토리
path: PATH
direct: 디렉토리
files: 파일

2. sys 모듈

sys 모듈은 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈

 

1) sys.path, sys.path.append

findspark를 설치하지않은 상태에서 아래의 코드를 실행 시키면 모듈이 없다는 에러가 나옵니다.

import findspark
findspark.init()
from pyspark.sql import SparkSession

spark = SparkSession.builder.master("local[*]").appName("pyspark").getOrCreate()
spark.sql("select '#' as col1").show()

import 문을 통해 다른 파이썬 파일을 불러올 때, 파이썬은 내부적으로 파일을 찾기 위해 sys.path와 PYTHONPATH에 있는 경로를 탐색

sys.path디렉터리의 경로들이 기록된 문자열 리스트

이 리스트에 경로를 추가하면 해당 경로에 있는 파이썬 파일을 import 문으로 불러올 수 있습니다.

 

현재의 파이썬 가상환경에 findspark를 설치하지 않고, 이미 설치되어있는 가상환경을 sys.path.append("경로")를 통해 sys.path에 필요한 라이브러리 및 모듈이 있는 경로를 지정해줍니다.

import sys
#sys 모듈을 통해 다른 모듈이 있는 경로를 추가해준다.
sys.path.append("C:/Users/user/Anaconda3/Lib/site-packages")

sys.path에는 파이썬에 의해 기본적으로 몇 가지 경로가 미리 추가되어 있습니다.

.py 파일이 속한 디렉터리의 절대 경로

sys.path에는 가장 먼저 .py 파일이 속한 디렉터리의 절대 경로가 추가됩니다.

특정 파이썬 파일을 실행하는 것 대신, 파이썬 인터프리터에서 직접 print(sys.path)를 실행하면 인터프리터를 실행할 당시의 경로(현재 작업 디렉터리)가 sys.path에 추가됩니다.

 

PYTHONPATH 환경 변수에 경로를 추가하면, 파이썬은 이 경로들을 sys.path에 추가해줍니다.

이를 통해 파이썬 코드 내부에서 뿐만 아니라 파이썬 코드 밖에서도 sys.path를 조작 가능합니다.


2) sys.argv()

명령 행에서 인수 전달하기

# argv_test.py
import sys
print(sys.argv)

명령 프롬프트 창에서 python_test디렉터리로 들어간 뒤 다음과 같이 실행

C:/python_test>python argv_test.py you need python
['argv_test.py', 'you', 'need', 'python']

매개변수 입력

매개변수 출력

python 명령어 뒤의 모든 것들이 공백을 기준으로 나뉘어서 sys.argv 리스트의 요소가 됩니다.


3. glob 모듈

1) 현재 경로의 모든 디렉토리,파일을 출력

from glob import glob
import os

#현재 디렉토리 변경
os.chdir("C:\python_skillup")

#현재 경로의 모든 디렉토리,파일을 출력(숨긴 파일은 출력x)
print(glob("*"))
print("\n")
#현재 경로의 모든 디렉토리,파일을 출력(숨긴 파일도 출력o)
print(os.listdir("."))
print("\n")


2) 해당 경로의 모든 디렉토리, 파일 출력

#해당 경로의 모든 디렉토리,파일을 출력
print(glob("C:/python_skillup/os_sys_glob/*"))


3) 해당 경로의 모든 파이썬 파일 출력

#해당 경로의 모든 .py파일 출력
print(glob("C:/baekjoon_algorithm/*.py"))

.py뿐만아니라 .txt, .exe등 원하는 확장자의 파일을 출력할 수도 있습니다.


4) os 모듈+ glob 모듈 활용 예제

#현재 디렉토리의 모든 디렉토리,파일을 불러와 디렉토리일 경우 <DIR>를 붙여 출력하고 디렉토리가 아닐경우 그냥 출력
for x in glob("*"):
    if os.path.isdir(x):
        print(x,'<DIR>')
    else:
        print(x)

추가적으로 더 알게되는 내용이 있거나, 활용한 파이썬 스크립트를 만들게 될 경우 링크를 달거나 추가하겠습니다.

728x90