프로그래밍 언어/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