본문 바로가기
인공지능/파이썬 기초

파일 입출력 모듈(Jupyter)

by hyunji00pj 2024. 10. 2.

KDT_4기 파이썬 기초 1002(2)

2024.10.02 수업 내용 복습일기 두번째

 

오늘은 Jupyter 노트북을 통해 파일을 입출력 해보겠다

 

1. os

파이썬의 os 모듈은 운영 체제와 상호 작용하는 많은 함수와 유틸리티를 제공합니다. 이 모듈을 사용하면 파일, 디렉터리 또는 운영 체제에 관한 작업을 수행할 수 있습니다.

import os
#현재 경로 확인
os.getcwd()
'C:\\kdthyunji\\JupyterNotebook'

 

아래 셀을 실행해 파일을 리스트로 반환해보자

#디렉토리 안에 파일(디렉토리)을 리스트로 반환
os.listdir(os.getcwd())
['.ipynb_checkpoints',
 '25.파일 입출력 모듈.ipynb',
 '텍스트파일1.txt',
 '텍스트파일2.txt',
 '텍스트파일3.txt']

위 실행 결과와 폴더를 확인하면 일치하게 출력된 것을 알 수 있다

 

특정 경로를 생성해 보자

#특정 경로 만들기
data_dir = './data/'
file_path = os.path.join(data_dir, 'output.txt')
print(file_path)
./data/output.txt

data_dir = './data1/'와 os.path.join(data_dir, 'output.txt')는 단순히 경로를 생성하는 코드일 뿐입니다. 이 코드는 파일이나 폴더를 실제로 생성하지 않습니다. 경로 문자열을 결합하여 특정 경로를 만들지만, 그 경로에 폴더를 생성하거나 파일을 만드는 동작은 따로 해야 합니다.


2. glob

glob 모듈은 파일과 폴더 이름을 찾을 때 사용하는 파이썬의 도구입니다. 이 모듈의 이름은 "전역적으로 찾기"라는 의미의 "global"에서 유래했습니다. glob는 특정 패턴에 일치하는 파일이나 폴더 이름을 쉽게 찾아줍니다.

import glob

glob.glob() 함수는 지정된 경로에서 패턴에 맞는 파일 목록을 검색하는 함수입니다.

./data/ 디렉터리 경로와 *.txt 파일 패턴을 결합합니다.

*.txt는 모든 .txt 확장자 파일을 의미합니다.

glob.glob(os.path.join('./data/','*.txt'))
['./data\\텍스트파일1.txt', './data\\텍스트파일2.txt', './data\\텍스트파일3.txt']

 

 

os.path.join('./data/', '*.txt')는 단순히 경로 문자열을 결합하는 함수입니다. 이 코드는 실제로 파일을 찾거나 처리하지 않고, 경로를 생성하는 역할만 합니다.

os.path.join('./data/','*.txt')
'./data/*.txt'

 

 

glob.glob('./data/*.txt')는 ./data/ 디렉토리 내의 모든 .txt 파일을 찾는 데 사용되는 코드입니다. 이 함수는 지정된 패턴에 맞는 파일의 경로를 리스트로 반환합니다.

glob.glob('./data/*.txt')
['./data\\텍스트파일1.txt', './data\\텍스트파일2.txt', './data\\텍스트파일3.txt']

 

현재 작업 디렉토리에서 모든 텍스트 파일(.txt 확장자 파일)을 찾고, 그 파일의 이름을 출력하는 기능을 수행합니다.

#현재 디렉토리 텍스트 파일 찾기
for filename in glob.glob('*.txt'):
    print(filename)
바나나.txt
사과.txt
오렌지.txt
텍스트파일1.txt
텍스트파일2.txt
텍스트파일3.txt

 

 

# 하위 경로의 txt파일 찾기
for filename in glob.glob('**/*.txt'):
    print(filename)
data\텍스트파일1.txt
data\텍스트파일2.txt
data\텍스트파일3.txt

 

# 현재 디렉토리와 하위 경로 텍스트 파일 모두 찾기
for filename in glob.glob('**/*.txt',recursive=True):
    print(filename)
바나나.txt
사과.txt
오렌지.txt
텍스트파일1.txt
텍스트파일2.txt
텍스트파일3.txt
data\텍스트파일1.txt
data\텍스트파일2.txt
data\텍스트파일3.txt

 

#파일명 글자수 및 모든 확장명으로 찾기
for filename in glob.glob('???.*',recursive=True):
    print(filename)
바나나.txt
오렌지.txt
for filename in glob.glob('??.*',recursive=True):
    print(filename)
25.파일 입출력 모듈.ipynb
사과.txt
# 문자열 패턴 포함 파일명으로 찾기
for filename in glob.glob('[a-z][a-z][a-z][a-z][a-z][a-z].*',recursive=True):
    print(filename)
abcdef.txt
for filename in glob.glob('[가-힣][가-힣][가-힣].*',recursive=True):
    print(filename)
바나나.txt
오렌지.txt
for filename in glob.glob('**/텍스*.*'):
    print(filename)
data\텍스트파일1.txt
data\텍스트파일2.txt
data\텍스트파일3.txt
for filename in glob.glob('**/*파일*.*'):
    print(filename)
data\텍스트파일1.txt
data\텍스트파일2.txt
data\텍스트파일3.txt

3. shutil

shutil 모듈은 파이썬에서 고수준 파일 연산을 수행하기 위한 유틸리티 모듈입니다. 기본적인 os 모듈에서 제공하는 기능을 확장하여, 파일 및 디렉터리를 복사, 이동, 삭제하는 데 사용할 수 있는 더 다양한 함수를 제공합니다.

 

import shutil

 

#파일 복사
shutil.copy('사과.txt', '사과_복사본.txt')
'사과_복사본.txt'
#파일 이동
shutil.move('사과.txt', 'data/사과_이동.txt')
'data/사과_이동.txt'
#확장명 바꾸기
shutil.move('abcdef.txt', '파이썬파일.py')
'파이썬파일.py'

4. fnmatch

파일 이름을 패턴 매칭할 때 사용하는 모듈

import fnmatch
#파일 이름이 패턴에 맞는지 확인
print(fnmatch.fnmatch('example.txt','*.txt'))
print(fnmatch.fnmatch('example.py','*.txt'))
True
False
for filename in os.listdir('data'):
    if fnmatch.fnmatch(filename,'?????[0-9].txt'):
        print(filename)
텍스트파일1.txt
텍스트파일2.txt
텍스트파일3.txt

5. pathlib

디렉토리의 경로를 객체 지향 방식으로 다룰수 있게 도와주는 모듈

from pathlib import Path
#경로를 하나의 객체로 만듦
current_path = Path('.')
print(current_path)


file_path = Path('data/file.txt')
print(file_path)
.
data\file.txt
#경로 만들기
new_path = Path('data')/'file.txt'
print(new_path)
file_path = Path('data/텍스트파일1.txt')

if file_path.exists():
    print('파일이 존재함')
else:
    print('파일이 존재하지 않음')
파일이 존재함
dir_path = Path('data/user/new_folder')
# parents: 상위 디렉토리까지 자동으로 생성
# exist_ok: 이미 디렉토리가 있어도 오류를 발생시키지 않음
dir_path.mkdir(parents=True,exist_ok=True)

6. zipfile

  • zip 파일을 읽고 쓰기 위한 표준 라이브러리
  • 데이터를 효율적으로 저장하거나 전송할 때 사용(여러개의 파일을 하나로 묶고, 크기를 줄임)
import zipfile
#압축하기
with zipfile.ZipFile('data/새파일.zip','w') as myzip:
    myzip.write('data/텍스트파일1.txt')
    myzip.write('data/텍스트파일2.txt')
    myzip.write('data/텍스트파일3.txt')
    myzip.write('data/사과_이동.txt')
#압축 파일 내용 확인
with zipfile.ZipFile('data/새파일.zip','r') as myzip:
    print(myzip.namelist())
    with myzip.open('data/텍스트파일1.txt') as myfile:
        print(myfile.read().decode())
['data/텍스트파일1.txt', 'data/텍스트파일2.txt', 'data/텍스트파일3.txt', 'data/사과_이동.txt']
1. 안녕하세요! 파이썬!
2. 안녕하세요! 파이썬!
3. 안녕하세요! 파이썬!
4. 안녕하세요! 파이썬!
5. 안녕하세요! 파이썬!
#압축 풀기
with zipfile.ZipFile('data/새파일.zip','r') as myzip:
    myzip.extractall()
#개별 압축 풀기
with zipfile.ZipFile('data/새파일.zip','r') as myzip:
    myzip.extract('data/사과_이동.txt','output')
#추가로 넣기
with zipfile.ZipFile('data/새파일.zip','a') as myzip:
    myzip.write('data/바나나.txt')

7. openpyxl

파이썬에서 엑셀 파일을 읽고 쓰고 수정할수 있게 해주는 모듈

 

!pip install -q openpyxl

import openpyxl as opx
#새로운 워크북 생성
wb = opx.Workbook()

#시트 선택
sheet = wb.active

#셀에 데이터 쓰기
sheet['A1'] = 'Hello'
sheet['B1'] = 'py'

#엑셀 파일 저장
wb.save('test.xlsx')
wb = opx.load_workbook('test.xlsx')
sheet = wb.active
print(sheet['A1'].value)
print(sheet['B1'].value)
print(sheet['C1'].value)
Hello
py
None
wb = opx.Workbook()
sheet = wb.active
sheet.title = '첫번째 시트'

wb.create_sheet(title='두번째 시트')
wb.create_sheet(title='세번째 시트')

sheet = wb['두번째 시트']
sheet['A1'] = '두번째 시트에 데이터를 추가'

wb.save('test2.xlsx')
wb = opx.Workbook()
sheet = wb.active
sheet.title = '학생 명단'

sheet['A1'] = '이름'
sheet['A2'] = '감사과'
sheet['A3'] = '반하나'
sheet['A4'] = '오렌지'
sheet['A5'] = '이메론'

sheet['B1'] = '점수'
sheet['B2'] = 98
sheet['B3'] = 85
sheet['B4'] = 95
sheet['B5'] = 76

wb.save('student_scores.xlsx')
wb = opx.Workbook()
sheet = wb.active
sheet.title = '학생 명단'

sheet['A1'] = '이름'
sheet['B1'] = '점수'

students = [
    ('김사과',98),
    ('반하나',85),
    ('오렌지',95),
    ('반하나',76)
]

for idx,(name,score) in enumerate(students,start=2):
    sheet[f'A{idx}'] = name
    sheet[f'B{idx}'] = score

wb.save('student_scores_pf.xlsx')

 

'인공지능 > 파이썬 기초' 카테고리의 다른 글

강의 출석 시스템(feat.파일 모듈)  (0) 2024.10.13
주피터 노트북(cmd)  (0) 2024.10.02
변수 타입 어노테이션  (4) 2024.10.02
파일 입출력을 이용한 단어장 만들기  (4) 2024.10.02
파일 입출력  (0) 2024.10.02