*이 글을 읽기전에 작성자 개인의견이 있으니, 다른 블로그와 교차로 읽는것을 권장합니다.*
파이썬에서 파일을 관리하는 모듈의 종류는 다음이 있습니다.
- os : 운영 체제와 상호작용하는 함수와 유틸리티 제공
- glob : 파일, 폴더 이름 찾을 때 사용 도구
- fileinput : 여러 파일 동시 읽는 스크립트 작성
- pickle : 파이썬 객체 구조 직렬화, 역직렬화, 바이트 스트림 변환
- shutil: 파일, 디렉토리 복사, 이동, 삭제, 함수 제공
- fnmatch : 와일드카드 문자로 파일 이름, 패턴 비교
- zlib : 데이터 크기를 줄여 송신
- zipfile : 여러 파일을 zip으로 합침
- gzip : 데이터를 압축하여 파일로 저장
- tarfile : 여러 파일을 tar형식으로 합치거나 해제
1. OS
파이썬의 OS 모듈은 운영 체제와 상호 작용하는 많은 함수와 유틸리티를 제공합니다 .이 모듈을 사용하면 파일, 디렉토리(폴더) 또는 운영 체제와 관한 작업을 수행할 수 있습니다.
1-1. os.getcwd()
os.getcwd() 메서드는 파일의 현재 경로를 확인하는 메서드입니다.
#os 모듈설치
import os
# 현재 경로 확인
os.getcwd()
참고: cwd는 current working directory의 뜻으로 현재 디렉토리의 경로를 확인한다는 뜻입니다.
1-2. os.listdir()
os.listdir() 메서드는 디렉토리 안의 파일을 리스트로 반환합니다.
#listdir()
os.listdir(os.getcwd())
1-3. os.path
os.path는 파일이나 폴더의 경로를 처리하고 지정할 때 사용합니다.
1-4. os.path.join()
os.path.join() 메서드는 여러 개의 경로 요소를 결합하여 하나의 경로로 만듭니다. 사용하는 상황은 디렉토리 다운로드의 경로가 길어질때, 다운로드 경로를 변수로 간단하게 처리하고 사용합니다.
- os.join.path('다운로드 경로', ' '파일경로')
#os.path.join
data_dir='./data/'
file_path=os.path.join(data_dir,'./cotent/file.txt')
print(file_path)
a='/content/drive/MyDrive/KDT/module'
fi=os.path.join(a, '*txt')
print(fi)
2. glob
glob 모듈은 파일과 폴더 이름을 찾을 때 사용하는 파이썬 도구입니다. 이 모듈의 이름은 '전역적으로 찾기'라는 'global'에서 유래해서 전체를 관장하는 의미입니다. glob은 특정 패턴에 일치하는 파일이나 폴더 이름을 쉽게 찾아줍니다.
- 사용형태: glob.glob( '/디렉토리 주소/.*.파일형식')
#해당 경로의 파일 이름을 리스트로 변환
glob.glob(os.path.join('/content/drive/MyDrive/KDT /module', '*.txt'))
# 해당경로에서 txt파일 찾기(리스트형태)
glob.glob('/content/drive/MyDrive/KDT/module1/*.txt')
#해당경로에서 txt파일 찾기(for문 사용)
for f in glob.glob('/content/drive/MyDrive/KDT/module1/*.txt'):
print(f)
glob.glob은 해당 경로의 파일 검색하기 기능입니다.
#현재 경로로 txt파일 찾기
for f in glob.glob('*.txt'):
print(filename)
# 파일명 글자수로 찾기
for f in glob.glob('???.*', recursive=True):
print(f)
참고: recursive는 '재귀적'이란 의미로 함수나 알고리즘이 자기 자신을 호출하는 것을 의미합니다. 함수나 알고리즘이 동일한 작업을 반복적으로 수행하는데 사용합니다. 디렉토리를 순회하고 모든 하위 디렉토와 파일을 검색하는 함수에서 recursive = True 을 사용하면, 함수가 재귀적으로 자기자신을 호출하여 디렉토리 구조- 하위 디렉토리 내용을 순회하고 검색합니다.
# 문자열 패턴 포함 파일명 찾기
for filename in glob.glob('[가-힣][가-힣][가-힣].*', recursive=True):
# 알파벳 글자수 4개
print(filename)
3. fileinput
fileinput 모듈은 파이썬에서 여러 파일을 입력 소스로 사용하여, 파일의 내용을 읽거나 수정할 수 있습니다. 파이썬 표준 라이브러리의 모듈 중 파일을 읽고 쓰는 작업을 간편하게 처리할 수 있습니다.
3-1. fileinput.input
fileinput.input은 여러 파일을 여러 파일을 순회하여 한번에 읽을 수 있습니다.
# fileinput.input을 사용해서 파일 읽기
with fileinput.input(glob.glob('/content/drive/MyDrive/KDT/module1/*.txt')) as f:
for line in f:
print(line)
3-2. isfirstline()
.isfirstline()을 사용해 해당 폴더의 모든 파일내용의 첫번째 줄 내용을 변경합니다.
# 해당 파일의 첫번째 줄 내용을 변경
with fileinput.input(glob.glob('/content/drive/MyDrive/KDT/module1/*.txt'), inplace=True) as f:
for line in f:
if f.isfirstline():
print('첫번째 줄', end='\n')
else:
print(line, end='')
# 해당 파일에서 검색된 내용 변경
with fileinput.input(glob.glob('/content/drive/MyDrive/KDT/module1/*.txt'), inplace=True) as f:
for line in f:
if line =='첫번째 줄\n':
print('검색된 줄의 내용을 변경함', end='\n')
else:
print(line, end='')
# 키워드를 찾아 원하는 텍스트로 치환하기
with fileinput.input(txt_files, inplace=True) as f:
for line in f:
if '3.' in line:
print(line.replace('3.', '세번째.'), end='')
else:
print(line, end='')
4. pickle
pickle모듈은 파이썬에서 객체의 직렬화(serialize)와 역직렬화(deserialize)를 위한 내장 모듈입니다. 파일을 저장하거나 네트워크를 통해 전송할 때 사용합니다. 주의할 점은 파일은 바이너리 모드('wb', 'rb')로 열어야 합니다.
- 바이너리: 0,1 숫자로 이루어진 이진법, 이진파일을 의미
- wb: w는 쓰기모드, b는 바이너리 모드, 따라서 wb는 바이트 스트림으로 직렬화합니다
- rb: r은 읽기모드, b는 바이너리 모드, 따라서 rb는 바이트 스트림으로 역직렬화합니다.
4-1. serialize(직렬화)
#변수 설정
data={'name':'John','age':30, 'city':'Seoul'}
#serialize 직렬화
with open('dick.pkl','wb') as f:
pickle.dump(data, f)
4-2. deserialize(역직렬화)
#deserialize 역직렬화
with open('dick.pkl','rb') as f:
data=pickle.load(f)
print(data)
print(type(data))
5. shutil
shutil모듈은 파일 및 디렉터리 복사, 이동, 이름 변경, 삭제 등의 역할을 수행합니다. 따라서, 파일을 다룰 때 가장 중요한 모듈 중 하나이기도 합니다.
5-1. 파일 복사
shutil.copy(src, dst)는 파일을 복사합니다. src는 source의 준말로 소스 파일 경로이고, dst는 destination(목적지)의 준말로 대상 파일 경로를 말합니다.
#shutil.copy
shutil.copy('/content/drive/MyDrive/KDT/module1/사과.txt', './사과.txt')
5-2. 파일 이동
shutil.move(src, dst)는 파일 또는 디렉토리를 이동합니다.
#shutil.move
shutil.move('./사과_복사본.txt', './data/사과_복사본.txt' )
6. fnmatch
fnmatch(file name matching)는 파일 이름을 패턴 매칭을 통해 검사하는 기능을 제공하는 파이썬의 내장 모듈입니다.
#fnmatch
if fnmatch.fnmatch('example.txt', '*txt'):
print('match')
for filename in glob.glob('/content/drive/MyDrive/KDT/module1/*.txt'):
if fnmatch.fnmatch(filename, '*.txt'):
print(filename)
7. 데이터압축
파이썬에서는 데이터 압축 및 아카이브 생성을 위한 여러 모듈을 제공합니다 .이러한 모듈을 사용하면 다양한 파일 압축 및 아카이브 형식으로 데이터를 처리할 수 있습니다.
7-1. zlib
deflate알고리즘은 다양한 압축 유형에서 사용되며 주로 gzip, zlib형식의 데이터를 생성하는데 사용하는데, 여기서 zlib은 데이터 압축 및 해제를 위한 파이썬 내장 모듈입니다.
#byte용량 확인
data= 'zlib을 이용한' *100
print(len(data)) #->900 byte사용
#zlib 압축
a=zlib.compress(data.encode('utf=8'))
print(a)
#zlib 해제
b=zlib.decompress(a)
print(b)
7-2. gzip
zip형식의 파일을 압축하고 해제할 수 있습니다.
#gzip
#압축
with gzip.open('org_data.txt.gz', 'wb') as f:
f.write(data.encode('utf-8'))
#해제
with gzip.open('org_data.txt.gz', 'rb') as f:
org_data= f.read().decode('utf-8')
print(len(org_data))
7-3. zipfile
zipfile모듈은 zip 파일을 만들거나 해제할 수 있습니다.
# 파일 합치고 압축하기
with zipfile.ZipFile('./data/새파일.zip', 'w') as myzip:
myzip.write('./data/텍스트파일1.txt')
myzip.write('./data/텍스트파일2.txt')
myzip.write('./data/텍스트파일3.txt')
# 압축 해제하기
with zipfile.ZipFile('./data/새파일.zip') as myzip:
myzip.extractall('압축푸는곳')
7-4. tarfile
tarfile은 tar 파일을 만들거나 해제할 수 있습니다. tar형식 파일은 Tape Archive의 약자로, 여러 파일을 그룹화하여 하나의 파일로 만들어주는데 사용합니다.
# 파일 합치고 압축하기
with tarfile.open('./data/텍스트파일.tar', 'w') as mytar:
mytar.add('./data/텍스트파일1.txt')
mytar.add('./data/텍스트파일2.txt')
mytar.add('./data/텍스트파일3.txt')
# 압축 해제하기
with tarfile.open('./data/텍스트파일.tar') as mytar:
mytar.extractall('압축푸는곳')
'Python 기초' 카테고리의 다른 글
파이썬 기초(22)-디렉토리 관리 프로그램 (0) | 2024.03.22 |
---|---|
주피터 노트북(jupyter notebook) 실행 방법 (1) | 2024.03.22 |
파이썬 기초(20)- 변수 타입 어노테이션(annotation) (0) | 2024.03.20 |
파이썬 예제(과제)-6. 파일 입출력을 이용한 단어장 만들기 (0) | 2024.03.20 |
파이썬 기초(19)-파일 입출력 (0) | 2024.03.20 |