1. 파일 읽기 및 저장
파일 입력
- 텍스트 파일 읽기, 쓰기, 저장 기능을 편리하게 사용할 수 있는 라이브러리
- 여러 파일을 읽고 수정할 수 있습니다.
import fileinput
import os
import glob
# 현재 경로 확인
os.getcwd()
# 디렉토리 내 파일 확인하기
os.listdir(os.getcwd())
# 경로 설정
path="sample/"
# glob(): 해당 경로의 파일 이름을 리스트로 반환
glob.glob(os.path.join(path, '*.txt'))
# ('sample\\새파일1.txt',
# 'sample\\새파일2.txt',
# 'sample\\새파일3.txt',
# 'sample\\새파일4.txt',
# 'sample\\새파일5.txt')
with fileinput.input(glob.glob(os.path.join(path, '*.txt'))) as f:
for line in f:
print(line)
# 1번째 줄입니다.
# 2번째 줄입니다.
# 3번째 줄입니다.
# 4번째 줄입니다.
# 5번째 줄입니다.
# 6번째 줄입니다.
# 7번째 줄입니다.
# 8번째 줄입니다.
# 9번째 줄입니다.
# 10번째 줄입니다.
# 11번째 줄입니다.
# 12번째 줄입니다.
# 13번째 줄입니다.
# 14번째 줄입니다.
# 15번째 줄입니다.
txt_files = glob.glob(os.path.join(path, '*.txt'))
with fileinput.input(txt_files, inplace=True) as f:
for line in f:
if f.isfirstline(): # 첫번째 라인인지 확인하는 함수(Bool)
print('첫번째 라인입니다.', end='\n')
else:
print(line, end='')
# 검색된 라인 변경하기
with fileinput.input(txt_files, inplace=True) as f:
for line in f:
if line == '첫번째 라인입니다.\n':
print('1번째 라인입니다.',end='\n')
else:
print(line, end='')
# 키워드 포함 라인 변경하기
with fileinput.input(txt_files, inplace=True) as f:
for line in f:
if '1번째' in line:
print('첫번째 줄입니다.',end='\n')
else:
print(line, end='')
# 텍스트 치환하기
with fileinput.input(txt_files, inplace=True) as f:
for line in f:
if '12번째' in line:
print('첫번째 줄입니다.',end='')
else:
print(line, end='')
간물
Python에서 사용되는 사전, 목록, 클래스와 같은 데이터 유형을 변환하지 않고 파일로 저장하고 로드하기 위한 모듈입니다.
import pickle
data = ('apple', 'banana', 'orange')
# 파일 저장
with open('list.pkl', 'wb') as f:
pickle.dump(data, f)
# 파일 읽기
with open('list.pkl', 'rb') as f:
data = pickle.load(f)
type(data) # list
print(data) # ('apple', 'banana', 'orange')
# 딕셔너리 저장
data = {}
data(1) = {'id':1, 'userid':'apple', 'name':'김사과','gender':'여자', 'age':20}
with open('dict.pkl', 'wb') as f:
pickle.dump(data, f)
with open('dic.pkl', 'rb') as f:
data = pickle.load(f)
type(data) # dict
print(data) # {1: {'id': 1, 'userid': 'apple', 'name': '김사과', 'gender': '여자', 'age': 20}}
2. 파일 찾기, 복사 또는 이동
파일 확장자로 검색
os.getcwd()
for filename in glob.glob('*.txt'):
print(filename)
# txt 파일 찾기: 하위 경로
for filename in glob.glob('**/*.txt'):
print(filename)
# sample\새파일1.txt
# sample\새파일2.txt
# sample\새파일3.txt
# sample\새파일4.txt
# sample\새파일5.txt
# txt 파일 찾기: 현재와 하위 경로 모두 포함
for filename in glob.glob('**/*.txt', recursive=True):
print(filename)
# Jupyter Notebook Installation.txt
# sample\새파일1.txt
# sample\새파일2.txt
# sample\새파일3.txt
# sample\새파일4.txt
# sample\새파일5.txt
# 파일명 글자수로 찾기
for filename in glob.glob('????.*', recursive=True): # 글자수 4개
print(filename)
# dict.pkl
# list.pkl
# 점심시간.txt
# 문자열 패턴 포함 파일명 찾기
for filename in glob.glob('(a-z)(a-z)(a-z)(a-z).*', recursive=True): # 알파벳 글자수 4개
print(filename)
# dict.pkl
# list.pkl
for filename in glob.glob('**/새파일*.*'):
print(filename)
# sample\새파일1.txt
# sample\새파일2.txt
# sample\새파일3.txt
# sample\새파일4.txt
# sample\새파일5.txt
for filename in glob.glob('**/*프로젝트*.*'):
print(filename)
# project\25_프로젝트.ipynb
# project\프로젝트 개요.txt
fnmatch
- 특정 패턴을 기반으로 파일 이름을 찾는 모듈인 glob과 유사
- 파일 이름 일치 상태를 true 또는 false 형식으로 반환하므로 os.listdir() 함수와 함께 사용됩니다.
import fnmatch
# 파일명은 '새' 시작하고 확장명은 .txt를 검색
# 확장자를 제외한 파일명의 길이는 4개이며, 파일명의 마지막 문자는 숫자임
for filename in os.listdir('./sample'):
if fnmatch.fnmatch(filename,'새??(0-9).txt'):
print(filename)
# 새파일1.txt
# 새파일2.txt
# 새파일3.txt
# 새파일4.txt
# 새파일5.txt


