os 모듈 완벽 활용법

1. 현재 작업 디렉토리 설정

 

VScode에서 ‘py파일 - code로 열기‘ 열 때

 

etc-image-0

 

폴더 열기를 누르고 현재 작업 디렉토리를 설정함

 

etc-image-1

 

이런 경우 그냥 폴더 선택 누르면 ~/pjty/01_pjt/project/project01이 현재 작업 디렉토리

 

etc-image-2

 

이렇게 하고 폴더 선택 누르면 ~/pjty/01_pjt/project 이 현재 작업디렉토리가 된다

 

 

2. 파일을 찾지 못하는 경우

 

파일을 찾지 못해서 파일을 open하지 못하거나, cmd에서 python ~.py가 먹히지 않는 경우

 

작업 디렉토리와 목적 파일의 경로가 잘 맞는지 확인해야함

 

etc-image-3

 

 

3. 현재 작업 디렉토리 얻기(os.getcwd())

 

현재 작업 디렉토리는 VScode에서 왼쪽 상단 파일 목록에서 굵게 표시된 글씨 보면 알 수 있는데

 

여기서 위 그림의 경우는 ~/pjty/01_pjt/project까지지만

 

etc-image-4

 

이 그림에선 ~/pjty/01_pjt/project/project01까지임

 

하지만 파이썬에서 현재 작업 디렉토리를 문자열로 반환해주는 함수가 있다

 

 

import os

 

s = os.getcwd()

 

print(s)

 

etc-image-5

 

s가 ‘C:\Users\OHYUBEEN\Desktop\pjty\01_pjt\project’ 이렇게 구해지는데.. 이 상태에서 movie_json을 열어볼려고 하면

 

etc-image-6

 

이런 경우 현재 작업 디렉토리가 ‘C:\Users\OHYUBEEN\Desktop\pjty\01_pjt\project’이고

 

movie_json을 열기 위한 경로를 ‘data/movie.json이라고 상대경로로 지정했는데

 

이러면 C:\Users\OHYUBEEN\Desktop\pjty\01_pjt\project + \data\movie.json 으로 파일을 찾고자 하는데

 

 

왼쪽 상단에 보면 movie.json 파일은 ~/01_pjt/project/project01/data/movie.json에 존재하므로 파일을 찾지 못하는 것

 

 

 

3-1) 현재 작업디렉토리에 의해 목적 파일의 상대경로를 정확히 지정하기

 

s = os.getcwd()

 

print(s)

‘C:\Users\OHYUBEEN\Desktop\pjty\01_pjt\project’

 

 

movie_json = open('project01/data/movie.json')

 

etc-image-7

 

정상적으로 파일이 열리는 것을 확인

 

python problem_a.py도 마찬가지로 현재 경로는 C:\Users\OHYUBEEN\Desktop\pjty\01_pjt\project인데

 

problem_a.py는 ~project/project01/에 존재하므로

 

python project01/problem_a.py로 해야 오류 없이 실행된다는 것 아래 그림처럼 확인

 

etc-image-8

 

3-2) 절대경로 사용

 

가장 쉽고 정확하다면 정확한 방법파일의 절대경로를 그대로 넣는 것

 

열고싶은 파일을 오른쪽 클릭하고 ‘경로 복사’하면 절대경로를 복사한다.

 

etc-image-9

 

복사한 절대경로를 그대로 넣고 실행하면 오류없이 깔끔하게 수행

 

etc-image-10

 

절대경로 사용할 때 복사하면

 

 

C:\Users\OHYUBEEN\Desktop\pjty\01_pjt\project\project01\data\movie.json

 

 

하지만 파이썬은 문자열 안에 \를 인식하지 못하므로

 

 

\\로 인식시키기 위해 escape sequence를 사용해서 \\로 사용하거나, 아니면 /으로 바꿔줘야함

 

 

 

4. 현재 작업경로 바꾸기(os.chdir(path))

 

현재 작업경로를 VScode를 꺼가지고 다시 설정할수도 있겠지만 파이썬 함수만으로 현재 작업경로를 바꿀 수가 있다.

 

os.chdir(path)하면 현재 작업경로를 path로 바꿔줌

 

etc-image-11

 

이렇게 현재 작업경로를 바꿔서 상대경로 ‘data/movie.json'을 그대로 사용해도 파일을 열 수 있다

 

혹은 저 코드가 귀찮은 경우

 

문자열끼리 덧셈하면 그대로 붙여준다는 점을 이용하여

 

s = os.getcwd()

 

print(s)

'c/Users/OHYUBEEN/Desktop/pjty/01_pjt/project'

 

path = s + '\\project01'

 

os.chdir(path)

 

print(os.getcwd())

'c/Users/OHYUBEEN/Desktop/pjty/01_pjt/project/project01'

 

 

5. 폴더 내부의 파일의 목록들을 알아내는 방법(os.listdir(path))

 

os.listdir(path)path에 존재하는 파일들의 목록을 전부 보여준다

 

etc-image-12

 

5-1) movies 폴더 내부에 존재하는 파일을 반복적으로 여는 방법?

 

 

현재 디렉토리를 os.getcwd()로 얻고, 이를 이용해서 movie_path까지 경로를 구합니다.

 

 

print(os.getcwd())

'C:\Users\OHYUBEEN\Desktop\pjty\01_pjt\project\projcet01'

 

movie_path = os.getcwd()+'\\data\\movies'

 

etc-image-13

 

그 후 os.listdir(movie_path)로

 

movie_path = 'C:\Users\OHYUBEEN\Desktop\pjty\01_pjt\project\projcet01\data\movies'에 존재하는 파일 목록을 리스트로 구합니다.

 

실제로 위 그림은 파일 목록을 리스트로 나타내는걸 보여줍니다.

 

etc-image-14

 

파일명이 들어간 file_list를 순회하여 metadata라고 가져오고 해당 파일의 절대경로를 구합니다

 

target_dir = movie_path + '\\' + metadata

 

예를 들어 'C:\Users\OHYUBEEN\Desktop\pjty\01_pjt\project\projcet01\data\movies' + '\\' + '12.json'

 

= 'C:\Users\OHYUBEEN\Desktop\pjty\01_pjt\project\projcet01\data\movies\12.json'이 target_dir이 되고

 

target_file = open(target_dir,encoding='UTF8') 로 파일을 연 다음에

 

target_json = json.load(target_file) 으로 json파일을 열어서 dict로 만든다

 

그래서 반복문이 돌면서 모든 파일목록에 대해 모든 json 파일을 반복적으로 열게 된다.

 

 

5-2) endswith 활용

 

endswith(‘’)는 해당 문자열로 끝나는가

 

xlsx파일 목록만 알고싶다면..

 

etc-image-15

 

 

 

6. 작업디렉토리에 폴더 만들기(os.mkdir)

 

os.mkdir(‘log’)하면 작업디렉토리에 ‘log’ 폴더 생성

 

etc-image-16
이미 존재한다면 에러남

 

 

 

7. 파일을 복사하는 방법(os.path, shutil.copy)

 

 

os.path.exists()는 디렉토리가 존재하는지

 

os.path.isfile()은 그것이 파일인지 체크

 

os.path.join(a,b)는 a,b 경로를 서로 합치는 것이다.

 

그냥 a+ / + b랑 똑같다고 봐도 될듯

 

shutil.copy(a,b)로 경로 b에 파일 a를 복사한다

 

 

etc-image-17

 

 

 

원래 텍스트 파일이 없지만

 

etc-image-18

텍스트파일이 생김

 

etc-image-19

 

 

pathlib을 이용해서 path 객체를 다루는 것이 요즘 대세?

 

근데 os가 많이 써봐서 그런지 무난한것 같다

 

 

etc-image-20

 

 

 

 

shutil.move, shutil.make_archive 등 사용례

 

https://deepdata.tistory.com/1084

 

구글드라이브로 대용량 데이터를 다룰 때 필요한 테크닉(압축해제, 자동압축, 파일 크기 확인방

구글 드라이브의 한 폴더 내에 너무 많은 데이터가 있을 경우, colab에서 구글 드라이브로 연동할때, 파이썬이 구글 드라이브의 폴더 내의 데이터에 제대로 접근하지 못한다 그래서 한 폴더당 1000

deepdata.tistory.com

 

 

728x90