>  기사  >  백엔드 개발  >  Python에서 고정 너비 파일을 어떻게 효율적으로 구문 분석할 수 있나요?

Python에서 고정 너비 파일을 어떻게 효율적으로 구문 분석할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 18:28:31393검색

How can I efficiently parse fixed width files in Python?

고정 너비 파일의 효율적인 구문 분석

고정 너비 파일은 견고한 구조로 인해 구문 분석에 어려움을 겪습니다. 이 문제를 해결하기 위해 다양한 접근 방식을 사용하여 해당 파일에서 데이터를 효율적으로 추출할 수 있습니다.

struct 모듈 사용

Python 표준 라이브러리의 struct 모듈은 간결하고 빠른 작업을 제공합니다. 고정 너비 라인을 구문 분석하기 위한 솔루션입니다. 사전 정의된 필드 너비와 데이터 유형을 허용하므로 대규모 데이터 세트에 적합한 옵션입니다. 다음 코드 조각은 이 목적으로 구조체를 활용하는 방법을 보여줍니다.

<code class="python">import struct

fieldwidths = (2, -10, 24)
fmtstring = ' '.join('{}{}'.format(abs(fw), 'x' if fw < 0 else 's') for fw in fieldwidths)

# Convert Unicode input to bytes and the result back to Unicode string.
unpack = struct.Struct(fmtstring).unpack_from  # Alias.
parse = lambda line: tuple(s.decode() for s in unpack(line.encode()))

print('fmtstring: {!r}, record size: {} chars'.format(fmtstring, struct.calcsize(fmtstring)))

line = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n'
fields = parse(line)
print('fields: {}'.format(fields))</code>

컴파일 시간 최적화를 사용한 문자열 슬라이싱

문자열 슬라이싱은 고정된 구문 분석을 위한 또 다른 실행 가능한 방법입니다. 너비 파일. 처음에는 효율성이 떨어지지만 "컴파일 시간 최적화"라는 기술을 사용하면 성능을 크게 향상시킬 수 있습니다. 다음 코드는 이 최적화를 구현합니다.

<code class="python">def make_parser(fieldwidths):
    cuts = tuple(cut for cut in accumulate(abs(fw) for fw in fieldwidths))
    pads = tuple(fw < 0 for fw in fieldwidths)  # bool flags for padding fields
    flds = tuple(zip_longest(pads, (0,)+cuts, cuts))[:-1]  # ignore final one
    slcs = ', '.join('line[{}:{}]'.format(i, j) for pad, i, j in flds if not pad)
    parse = eval('lambda line: ({})\n'.format(slcs))  # Create and compile source code.
    # Optional informational function attributes.
    parse.size = sum(abs(fw) for fw in fieldwidths)
    parse.fmtstring = ' '.join('{}{}'.format(abs(fw), 'x' if fw < 0 else 's')
                                                for fw in fieldwidths)
    return parse</code>

이 최적화된 접근 방식은 고정 너비 파일 구문 분석에 효율성과 가독성을 모두 제공합니다.

위 내용은 Python에서 고정 너비 파일을 어떻게 효율적으로 구문 분석할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.