프로그래밍 언어/Python

[Python] File과 Directory

eunnys 2023. 10. 26. 19:33

os 모듈

  • 경로명과 파일명에 대한 함수를 제공하는 모듈이다.
  • 특정 경로에 위치한 파일과 디렉토리 목록을 구한다.

 

os 모듈 설명
os.chdir(경로) 작업 디렉토리를 변경한다
os.getcwd() 현재 작업 디렉토리의 경로를 얻는다
os.listdir(경로) 지정된 경로 하위의 파일(디렉토리 포함)을 리스트로 반환한다
os.mkdir(경로) 지정된 경로에 디렉토리(폴더)를 만든다
os.rmdir(경로) 지정된 경로의 디렉토리(폴더)를 삭제한다
(파일이 포함되어 있으면 삭제가 안된다)
os.remove(경로) 지정된 경로에 있는 파일을 삭제한다

 

os.path 모듈 설명
os.path.isdir(경로) 경로의 디렉토리 여부를 True/False로 반환한다
os.path.isfile(경로) 경로의 파일 여부를 True/False로 반환한다
os.path.exists(경로) 디렉토리나 파일이 존재하는지 판단한다
os.path.splitext(경로) 경로와 파일의 확장자명을 분리한다
os.path.getsize(경로) 파일의 크기를 조회한다

 

import os

# raw string
path = r'g:\내 드라이브\DIMA3\Python' 
os.chdir(path)
c_path = os.getcwd()
print('현재 작업 디렉토리:', c_path)
os.chdir('..')
print('상위 디렉토리로 이동')
c_path = os.getcwd()
print('현재 작업 디렉토리:', c_path)
현재 작업 디렉토리: g:\내 드라이브\DIMA3\Python
상위 디렉토리로 이동
현재 작업 디렉토리: g:\내 드라이브\DIMA3

c_path = os.getcwd()
print('현재 작업 디렉토리:', c_path)
os.chdir('./subdir')
print('상위 디렉토리로 이동')
c_path = os.getcwd()
print('현재 작업 디렉토리:', c_path)
현재 작업 디렉토리: g:\내 드라이브\DIMA3\Python
상위 디렉토리로 이동
현재 작업 디렉토리: g:\내 드라이브\DIMA3\Python\subdir

# 파일 및 디렉토리 목록 반환

list = os.listdir()
for item in list:
    if os.path.isfile(item):
        print(f'[File] {item}, {os.path.getsize(item)}bytes')
    else:
        print(f'[Directory] {item}')
[File] Python_실습.ipynb, 122185bytes
[Directory] .ipynb_checkpoints
[File] Coding_Test_1.ipynb, 46279bytes
[File] sysarg.py, 155bytes
[File] myfile.txt, 16bytes
[File] song.txt, 1796bytes
[File] score.txt, 182bytes
[File] python.jpg, 10542bytes
[File] copy_python.jpg, 10542bytes
[Directory] subdir

 

 


glob 모듈

  • 패턴(유닉스 셀이 사용하는 규칙)을 이용하여 파일을 검색할 때 사용한다.
  • glob 함수에 파일명의 패턴을 이용하여 특정 폴더와 그 하위에 있는 파일을 찾는다.

 

패턴 설명
**/ , */ 현재 디렉토리에 있는 폴더만 확인
** , * 현재 디렉토리 내 디렉토리와 파일까지 확인
*/* , **/** 현재 디렉토리를 제외한 현재 디렉토리의 바로 하위
디렉토리와 파일 확인
** recursive=True 속성을 함께 사용하면 현재 디렉토리 포함
모든 하위 디렉토리와 폴더까지 확인

 

※  ** 와 *의 차이 : 기본적인 기능에 있어서 차이는 없지만 recursive=True인 경우 차이가 생긴다.
     ' * '는  recursive 탐색이 안되지만 ' ** '는 recursive 탐색이 가능하다.
 

import os
import glob

# 현재 디렉토리 내 모든 디렉토리 출력: **/, */
for f in glob.glob('**/'):
    print(f)
subdir\

# 현재 디렉토리 내 모든 디렉토리와 파일 출력: **, *
for f in glob.glob('**'):
    print(f)
Python_실습.ipynb
Coding_Test_1.ipynb
sysarg.py
myfile.txt
song.txt
score.txt
python.jpg
copy_python.jpg
subdir

# 하위 디렉토리에 있는 디렉토리와 파일 출력: **/**, */*
# 현재 디렉토리는 포함 안됨
for f in glob.glob('**/**'):
    print(f)
Python\Python_실습.ipynb
Python\Coding_Test_1.ipynb
Python\sysarg.py
Python\myfile.txt
Python\song.txt
Python\score.txt
Python\python.jpg
Python\copy_python.jpg
Python\subdir

# 현재 디렉토리를 포함하여 하위 모든 디렉토리와 파일 출력
for i, f in enumerate(glob.glob('**', recursive=True)):
    print(i, f)
0 Python
1 Python\Python_실습.ipynb
2 Python\Coding_Test_1.ipynb
3 Python\sysarg.py
4 Python\myfile.txt
5 Python\song.txt
6 Python\score.txt
7 Python\python.jpg
8 Python\copy_python.jpg
9 Python\subdir
10 Python\subdir\subdir-2