os 모듈 완벽 활용법

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

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

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

 

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

 

 

 

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

 

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

 

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

 

 

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

 

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

 

 

import os

 

s = os.getcwd()

 

print(s)

 

 

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

 

 

이런 경우 현재 작업 디렉토리가 ‘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')

 

 

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

 

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

 

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

 

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

 

 

3-2) 절대경로 사용

 

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

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

 

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

 

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

 

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

 

 

이렇게 현재 작업경로를 바꿔서 상대경로 ‘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에 존재하는 파일들의 목록을 전부 보여준다

 

 

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'

 

 

그 후 os.listdir(movie_path)로

 

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

 

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

 

 

파일명이 들어간 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파일 목록만 알고싶다면..

 

 

 

 

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

 

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

 

이미 존재한다면 에러남

 

 

 

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를 복사한다

 

 

 

 

 

원래 텍스트 파일이 없지만

 

텍스트파일이 생김

 

 

 

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

 

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

 

 

 

 

 

 

shutil.move, shutil.make_archive 등 사용례

 

https://deepdata.tistory.com/1084

 

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

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

deepdata.tistory.com

 

 

TAGS.

Comments