Rust로 작성된 중복 라인 제거를 위한 Python 라이브러리
요약
이 라이브러리는 파일 라인 조작에 특화되어 있으며, 속도와 효율성을 위해 Rust로 작성되었습니다. `compute_unique_lines` 함수는 여러 입력 파일에서 고유한 라인을 추출하고, `compute_added_lines` 함수는 두 번째 파일에만 존재하는 추가된 라인을 찾아냅니다.
핵심 포인트
- Rust 기반으로 높은 성능과 효율성을 제공합니다.
- 중복 제거(Deduplicating) 기능이 매우 빠릅니다 (GNU Sort 대비 획기적).
- 두 파일 간의 차이점(추가된 라인)을 비교할 수 있습니다.
- pyo3 등을 활용하여 Rust와 Python의 장점을 결합했습니다.
목차
프로젝트 소개
이 라이브러리는 파일의 라인을 조작하는 데 사용됩니다. 속도와 효율성을 달성하기 위해 이 라이브러리는 Rust로 작성되었습니다.
이 라이브러리에는 두 가지 함수가 있습니다:
compute_unique_lines- 이 함수는 입력 파일 경로 목록과 출력 파일 경로를 받아서, 입력 파일 경로들을 순회하며 고유한 라인들만 출력 파일에 씁니다.compute_added_lines- 이 함수는 세 개의 인자(first_file_path,second_file_path,output_file_path)를 받고, 두 번째 파일에는 나타나지만 첫 번째 파일에는 나타나지 않은 라인들만 출력 파일에 씁니다.
구현 기술
성능
중복 라인 제거 (Deduplicating)
| 라이브러리 | 함수 | 시간 | 최대 메모리 |
|---|---|---|---|
| GNU Sort | sort -u -o output 500mb_one 500mb_two | 37.35초 | 8,261mb |
| PyDeduplines | compute_unique_lines('./workdir', ['500mb_one', '500mb_two'], 'output', 16) | 4.55초 | 685mb |
추가된 라인 (Added Lines)
| 라이브러리 | 함수 | 시간 | 최대 메모리 |
|---|---|---|---|
| GNU Sort | comm -1 -3 <(sort 500mb_one) <(sort 500mb_two) > output.txt | 26.53초 | 4,132mb |
| PyDeduplines | compute_added_lines('./workdir', '500mb_one', '500mb_two', 'output', 16) | 3.95초 | 314mb |
설치 (Installation)
pip3 install PyDeduplines
문서화 (Documentation)
def compute_unique_lines(
working_directory: str,
file_paths: typing.List[str],
...
working_directory- 작업할 디렉터리의 파일 경로입니다. 각 분할 파일은 이 디렉터리에 생성됩니다.file_paths- 반복하여 고유 값을 계산할 입력 파일 경로를 포함하는 문자열 목록입니다.output_file_path- 고유 라인이 작성될 경로입니다.number_of_splits- 이 매개변수는 분할 수에 따라 각 입력 파일에서 몇 개의 작은 분할을 만들지 지정합니다. 이 라이브러리의 아이디어는 이 매개변수에 의해 정의됩니다. 분할 수가 많을수록 최대 메모리 소비가 낮아집니다. 더 많은 분할이 있다는 것은 더 많은 파일을 열어야 한다는 것을 기억하십시오.number_of_threads- 병렬 스레드 수입니다. 0을 사용하면 가능한 모든 코어를 사용한다는 의미입니다. 1보다 큰 스레드 수는 각 입력 파일에 여러 개의 분할을 유발합니다.
def compute_added_lines(
working_directory: str,
first_file_path: str,
...
working_directory- 작업할 디렉터리의 파일 경로. 분할된 각 파일은 이 디렉터리에 생성됩니다.first_file_path- 반복할 첫 번째 파일의 경로입니다.second_file_path- 반복하며 첫 번째 파일에 존재하지 않는 라인을 찾을 파일의 경로입니다.output_file_path- 두 번째 파일에는 나타나지만 첫 번째 파일에는 나타나지 않은 라인들을 포함하는 출력 파일의 경로입니다.number_of_splits- 이 매개변수는 분할 수에 따라 각 입력 파일에서 몇 개의 작은 조각(split)을 만들지 지정합니다. 이 라이브러리의 아이디어는 이 매개변수에 의해 정의됩니다. 분할 수가 많을수록 최대 메모리 사용량은 낮아집니다. 더 많은 분할이 있다는 것은 더 많은 파일을 열어야 한다는 것을 기억하십시오.number_of_threads- 병렬 스레드 수입니다. 0을 사용하면 가능한 모든 코어를 사용한다는 의미입니다. 1보다 큰 스레드 수는 각 입력 파일에 여러 개의 분할을 유발합니다.
사용법
import pydeduplines
pydeduplines.compute_unique_lines(...)
라이선스
MIT License 하에 배포됩니다. 자세한 내용은 LICENSE를 참조하십시오.
문의처
Gal Ben David - [email protected]
AI 자동 생성 콘텐츠
본 콘텐츠는 개발 자료 GitHub · ec1fbd44의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기