Python/개념

2024-03-21 파일 입출력 라이브러리

nomad06 2024. 3. 21. 14:14

1. OS

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

 

2. glob

glob 모듈은 파일과 폴더 이름을 찾을  사용하는 파이썬의 도구입니다.  모듈의 이름은 "전역적으로 찾기"라는 의미의 "global"에서 유래했습니다. glob 특정 패턴에 일치하는 파일이나 폴더 이름을 쉽게 찾아줍니다. (아래 파일을 다운로드 받아 압축을 풀고 예제를 진행합니다.)

 

예제파일.zip
0.01MB

파일 다운 후 실행 =>

 

 

3.  fileinput

fileinput 모듈은 파이썬에서 여러 입력 스트림을 동시에 순회하는  유용합니다.  모듈의 주요 용도는 명령줄에서 명시된 여러 파일을 동시에 읽는 스크립트를 작성하는 것입니다.

 

3-1. 각 파일의 첫번째 라인을 찾아 변경하기

3-2. 검색된 라인을 변경하기

3-3. 키워드를 찾아 원하는 텍스트로 치환하기

txt_files = glob.glob(os.path.join('data/', '*.txt'))
print(txt_files)

# 각 파일의 첫번째 라인을 찾아 변경하기
with fileinput.input(txt_files, inplace=True) as f:
    for line in f:
        if f.isfirstline():
            print('첫번째 라인이야!', end='\n')
        else:
            print(line, end='')
            
# 검색된 라인을 변경하기
with fileinput.input(txt_files, 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 '2.' in line:
            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='')

 

for filename in glob.glob('*.txt'):
    print(filename)

# txt 파일 찾기 : 하위 경로
for filename in glob.glob('**/*.txt'):
    print(filename)
    
# txt 파일 찾기 : 현재와 하위 경로 모두 포함
for filename in glob.glob('**/*.txt', recursive=True):
    print(filename)

# 파일명 글자수로 찾기
for filename in glob.glob('????.*', recursive=True): # 글자수 4개
    print(filename)

for filename in glob.glob('??.*', recursive=True): # 글자수 2개
    print(filename)
    
# 문자열 패턴 포함 파일명 찾기
for filename in glob.glob('[a-z][a-z][a-z][a-z].*', recursive=True): # 알파벳 글자수 4개
    print(filename)

for filename in glob.glob('**/텍스*.*'):
    print(filename)

for filename in glob.glob('**/*파일*.*'):
    print(filename)

 

4. pickle

pickle 모듈은 파이썬 객체 구조를 직렬화하고 역직렬화하는 프로세스를 제공합니다. 다른 말로하면, 파이썬 객체(리스트, 딕셔너리, 클래스 인스턴스 ) 바이트 스트림으로 변환하고,  바이트 스트림을 다시 파이썬 객체로 복원할  있습니다.

 

5. shutil

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

import shutil

# 파일 복사하기
shutil.copy('./Data/텍스트파일1.txt', './Data/텍스트파일1_복사본.txt')

# 파일 이동하기
shutil.move('./Data/텍스트파일1_복사본.txt', './텍스트파일1_복사본.txt')

# 확장명 바꾸기
shutil.move('./텍스트파일1_복사본.txt', './텍스트파일1_복사본.py')

# 확장명 바꾸기
shutil.move('./텍스트파일1_복사본.py', './텍스트파일1_복사본.txt')

 

6. fnmatch

fnmatch는 파일 이름과 패턴을 비교하거나 매칭하는 데 사용되는 Python의 표준 라이브러리 모듈 중 하나입니다. 이 모듈은 와일드카드 문자(*, ?)를 사용하여 파일 이름을 패턴과 비교하고 일치하는지 확인하는 기능을 제공합니다. 주로 파일 및 디렉터리 관리 작업에서 사용됩니다.

7. 데이터 압축

파이썬에서는 데이터 압축  아카이브 생성을 위한 여러 모듈을 제공합니다. 이러한 모듈들을 사용하면 다양한 압축  아카이브 형식으로 데이터를 처리할  있습니다.

 

1. zlib: 데이터를 압축하거나 해제할 때 사용하는 모듈

 

2. gzip: 내부적으로 zlib 알고리즘을 사용

import gzip

with open('org_data.txt', 'w') as f:
    f.write(data)
    
# gzip으로 압축
with gzip.open('compressed.txt.gz', 'wb') as f:
    f.write(data.encode('utf-8'))
    
# gzip 압축 해제
with gzip.open('compressed.txt.gz', 'rb') as f:
    org_data = f.read().decode('utf-8')

print(len(org_data))

 

3. 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')

# 압축 해제하기
with zipfile.ZipFile('./Data/텍스트파일.zip') as myzip:
    myzip.extractall()

 

4. tarfile: 여러개 파일을 tar 확장자로 합쳐서 압축할 때 사용

import tarfile

# 파일 합치고 압축하기
with tarfile.open('./Data/텍스트파일.tar', 'w') as mytar:
    mytar.add('./Data/텍스트파일1.txt')
    mytar.add('./Data/텍스트파일2.txt')
    mytar.add('./Data/텍스트파일3.txt')
    mytar.add('./Data/텍스트파일4.txt')
    mytar.add('./Data/텍스트파일5.txt')
    
# 압축 해제하기
with tarfile.open('./Data/텍스트파일.tar') as mytar:
    mytar.extractall()