Zip 파일에서 Regex Matching 문제 해결하기

대량의 텍스트 파일이 zip 아카이브로 압축되어 있을 경우, 특정 텍스트 패턴(예: 모델명)을 해당 파일들에서 압축 해제 없이 효율적으로 검색해야 하는 일반적인 문제에 직면할 수 있습니다. 수백만 개의 파일이 여러 zip 아카이브에 분산되어 있을 때 이 작업은 특히 귀찮아질 수 있습니다. 이번 블로그 포스트에서는 파이썬의 기능을 활용하여 zipfile 모듈을 사용하여 이 문제를 해결하는 방법을 탐구합니다.

당면한 도전

다음과 같은 상황에 처해 있을 수 있습니다:

  • 1백만 개가 넘는 텍스트 파일이 40개의 zip 파일로 압축되어 있습니다.
  • 약 500개의 전화 모델명이 포함된 목록이 있으며, 이 파일들에서 각 모델이 언급된 횟수를 세고 싶습니다.

여기서 핵심은 파일의 내용을 압축 해제하지 않고 regex 매칭을 수행하는 것입니다. 이 요구를 완벽하게 충족하는 기성 솔루션은 없지만, 파이썬의 내장 모듈이 간단하면서도 효과적인 우회 방법을 만드는 데 도움을 줄 수 있습니다.

파이썬의 Zipfile 모듈을 활용한 솔루션

압축된 파일 내에서 자동으로 regex 검색을 제공하는 모듈은 없지만, 우리는 파이썬의 zipfile 모듈을 쉽게 활용할 수 있습니다. 이를 통해 zip 아카이브 안에 있는 파일의 내용을 읽고 regex 검색 패턴을 적용할 수 있습니다.

단계별 구현

  1. 필요한 모듈 가져오기 zipfile 모듈을 가져오는 것으로 시작합니다. 이 모듈은 zip 파일을 직접 읽고 쓸 수 있는 도구를 제공합니다.

    import zipfile
    
  2. Zip 아카이브 열기 ZipFile 메서드를 사용하여 zip 파일을 엽니다.

    f = zipfile.ZipFile('myfile.zip')
    
  3. 아카이브 내 파일 순회하기 zip 아카이브에 포함된 파일 목록을 반복합니다. namelist() 메서드를 사용하여 모든 파일의 이름을 가져올 수 있습니다.

    for subfile in f.namelist():
        print(subfile)
    
  4. 각 파일의 내용 읽고 검색하기 각 파일에 대해 내용을 읽고 줄로 나누어 처리합니다. 그런 다음 이 줄들을 사용하여 regex를 통해 일치를 찾을 수 있습니다.

    data = f.read(subfile)
    for line in data.split('\n'):
        print(line)  # 이 줄을 regex 매칭 로직으로 교체하세요
    

전체 코드 예제

다음은 모든 것이 하나의 완전한 스크립트로 결합된 모습입니다:

#!/usr/bin/python

import zipfile
import re  # 패턴 매칭을 위한 regex 모듈 가져오기

# 모델명 검색을 위한 함수 정의
def search_models_in_zip(zip_filename, models):
    f = zipfile.ZipFile(zip_filename)
    occurrences = {model: 0 for model in models}

    for subfile in f.namelist():
        data = f.read(subfile).decode('utf-8')
        for line in data.split('\n'):
            for model in models:
                if re.search(model, line):
                    occurrences[model] += 1
    return occurrences

# 모델명 목록을 여기에서 정의하세요
model_names = ['model1', 'model2', 'model3']  # 모델명을 추가하세요
result = search_models_in_zip('myfile.zip', model_names)
print(result)

결론

이 방법을 따르면 파이썬의 zipfile 모듈을 사용하여 zip 아카이브 내 텍스트 파일에서 효율적으로 regex 매칭을 수행할 수 있습니다. 이 접근 방식은 시간과 저장 공간을 절약하여 대량의 데이터 세트를 보다 효율적으로 처리할 수 있게 해줍니다. 파이썬의 힘을 활용하여 오늘날의 텍스트 처리 작업을 단순화하세요!

이제 zip 파일을 탐색하고 그 안의 데이터에서 통찰력을 추출할 준비가 되었습니다.