이번 편은 굉장히 유익한 게 많은 듯!
확실히 라이브러리 많이 아는 것이 힘이야....
1. OS 모듈 (import os)
os.getcwd() - 현재 경로 확인
os.listdir(os.getcwd()) - 디렉토리 안의 파일을 리스트로 반환
#경로만들기
data_dir = './data/'file_path = os.path.join(data_dir, 'output.txt') #경로를 합쳐주는 역할
2. Glob (import glob) : 파일과 폴더 이름을 찾을 때
glob.glob(os.path.join('./data/', '*.txt')) - 해당 경로의 파일(디렉토리)를 리스트로 반환
for filename in glob.glob('**/*.txt')
: print(filename) #하위 경로의 txt 파일 찾기
#현재 경로와 하위 경로의 txt 파일 모두 찾기
for filename in glob.glob('**/*.txt', recursive=True):
print(filename)
# 파일명 글자수로 찾기
for filename in glob.glob('???.*', recursive=True): # ??? : 3글자짜리만 찾음 .*: 확장명 상관없이
print(filename)
# 문자열 패턴 포함 파일명 찾기
for filename in glob.glob('[a-z][a-z][a-z][a-z][a-z][a-z].*', recursive=True): #[a-z] : 한글자짜리
print(filename)
# 문자열 패턴 포함 파일명 찾기(한글)
for filename in glob.glob('[가-힣][가-힣].*', recursive=True): #[가-힣] : 한글 한글자짜리
print(filename)
for filename in glob.glob('**/텍스*.*', recursive=True): #해당 글자가 포함되어 있는 파일 찾기
print(filename)
for filename in glob.glob('**/*파일*.*', recursive=True): #해당 글자가 포함되어 있는 파일 찾기. LIKE 쓰듯이?
print(filename)
3. fileinput (import fileinput)
with fileinput.input(glob.glob(os.path.join('./data/', '*.txt'))) as f: #input: 읽어들여오기
for line in f:
print(line)
#각 파일의 첫번째 라인을 찾아 변경하기
with fileinput.input(txt_files, inplace=True) as f: #inplace = 덮어쓰기
for line in f:
if f.isfirstline():
print('첫번째 라인입니다', end='\n')
else:
print(line, end='')
#검색된 라인을 변경하기
with fileinput.input(txt_files, inplace=True) as f: #inplace = 덮어쓰기
for line in f:
if (line == '첫번째 라인입니다\n'):
print("검색된 라인을 변경했음", end='\n')
else:
print(line, end='')
#키워드를 찾아 원하는 텍스트로 치환하기
with fileinput.input(txt_files, inplace=True) as f: #inplace = 덮어쓰기
for line in f:
if '3. ' in line:
print(line.replace('3.', '세번째.'), end='')
else:
print(line, end='')
4. pickle (import pickle) : 파이썬 객체를 바이트스트림으로 변환하여 보내고, 다시 바이트스트림으로 받아 객체로 복원
with open('list.pkl', 'wb') as f:
pickle.dump(data, f) #바이트 코드로 변환 (= 직렬화)
# 역직렬화: 바이트 스트림을 다시 파이썬 객체로 복원. 확장명은 아무거나 써도 됨. abc같이
with open('list.pkl', 'rb') as f:
data = pickle.load(f)print(data)print(type(data))
5. shutil (import shutil) : 파일 복사, 이동
shutil.copy('./data/텍스트파일1.txt', './텍스트파일1_복사본.txt')
shutil.move('./텍스트파일1_복사본.txt', './data/텍스트파일1_복사본.txt')
shutil.move('./data/텍스트파일1.txt', './data/텍스트파일1.py') #옮기면서 확장명 변경도 가능
6. fnmatch (import fnmatch) : 파일 비교
for filename in os.listdir('./data'):
if fnmatch.fnmatch(filename, '?????[0-9].txt'):
print(filename)
7. 데이터 압축
크게 4가지로 정리
7-1. zlib
compress_data = zlib.compress(data.encode(encoding='utf-8')) - 압축
org_data = zlib.decompress(compress_data).decode('utf-8') - 복원
7-2. gzip (gz)
#127kb
with open('org_data.txt', 'w') as f:
f.write(data)
#1kb
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')
7-3. zipfile
with zipfile.ZipFile('./data/새파일.zip', 'w') as myzip:
myzip.write('./data/텍스트파일1.py')
myzip.write('./data/텍스트파일2.txt')
myzip.write('./data/텍스트파일3.txt')
with zipfile.ZipFile('./data/새파일.zip') as myzip: #r은 생략돼있음
myzip.extractall('압축푸는곳')
7-4. tarfile #zip은 윈도우, tar은 맥 / 메소드도 거의 비슷함
with tarfile.open('./data/새파일.tar', 'w') as mytar:
mytar.add('./data/텍스트파일1.py')
mytar.add('./data/텍스트파일2.txt')
mytar.add('./data/텍스트파일3.txt')
with tarfile.open('./data/새파일.tar') as mytar:
mytar.extractall('압축푸는곳2')
'■ 공부 > Python' 카테고리의 다른 글
DAY 9. 디렉토리 관리 프로그램 (2) | 2024.03.22 |
---|---|
[python] 파일 입출력을 이용한 단어장 만들기 (1) | 2024.03.22 |
DAY 9. 변수 타입 어노테이션 (0) | 2024.03.21 |
DAY 8-2. 파일 입출력 (0) | 2024.03.20 |
DAY 8-1. 파이썬 모듈 (1) | 2024.03.20 |