Zip 파일에서 Regex Matching 문제 해결하기
대량의 텍스트 파일이 zip 아카이브로 압축되어 있을 경우, 특정 텍스트 패턴(예: 모델명)을 해당 파일들에서 압축 해제 없이 효율적으로 검색해야 하는 일반적인 문제에 직면할 수 있습니다. 수백만 개의 파일이 여러 zip 아카이브에 분산되어 있을 때 이 작업은 특히 귀찮아질 수 있습니다. 이번 블로그 포스트에서는 파이썬의 기능을 활용하여 zipfile
모듈을 사용하여 이 문제를 해결하는 방법을 탐구합니다.
당면한 도전
다음과 같은 상황에 처해 있을 수 있습니다:
- 1백만 개가 넘는 텍스트 파일이 40개의 zip 파일로 압축되어 있습니다.
- 약 500개의 전화 모델명이 포함된 목록이 있으며, 이 파일들에서 각 모델이 언급된 횟수를 세고 싶습니다.
여기서 핵심은 파일의 내용을 압축 해제하지 않고 regex 매칭을 수행하는 것입니다. 이 요구를 완벽하게 충족하는 기성 솔루션은 없지만, 파이썬의 내장 모듈이 간단하면서도 효과적인 우회 방법을 만드는 데 도움을 줄 수 있습니다.
파이썬의 Zipfile 모듈을 활용한 솔루션
압축된 파일 내에서 자동으로 regex 검색을 제공하는 모듈은 없지만, 우리는 파이썬의 zipfile
모듈을 쉽게 활용할 수 있습니다. 이를 통해 zip 아카이브 안에 있는 파일의 내용을 읽고 regex 검색 패턴을 적용할 수 있습니다.
단계별 구현
-
필요한 모듈 가져오기
zipfile
모듈을 가져오는 것으로 시작합니다. 이 모듈은 zip 파일을 직접 읽고 쓸 수 있는 도구를 제공합니다.import zipfile
-
Zip 아카이브 열기
ZipFile
메서드를 사용하여 zip 파일을 엽니다.f = zipfile.ZipFile('myfile.zip')
-
아카이브 내 파일 순회하기 zip 아카이브에 포함된 파일 목록을 반복합니다.
namelist()
메서드를 사용하여 모든 파일의 이름을 가져올 수 있습니다.for subfile in f.namelist(): print(subfile)
-
각 파일의 내용 읽고 검색하기 각 파일에 대해 내용을 읽고 줄로 나누어 처리합니다. 그런 다음 이 줄들을 사용하여 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 파일을 탐색하고 그 안의 데이터에서 통찰력을 추출할 준비가 되었습니다.