Python의 sscanf() 기능

Abid Ullah 2023년10월10일
Python의 sscanf() 기능

sscanf() 함수는 프로그래밍 언어 C 및 C++에서 가져온 것입니다. Python은 이 메서드와 완전히 동일한 메서드나 라이브러리를 제공하지 않지만 이 기능을 실행하는 다른 방법이 있을 수 있습니다.

이 Python 문서는 sscanf()가 제공해야 하는 것과 Python 스크립트에서 이를 모방할 수 있는 방법을 더 잘 이해할 수 있도록 합니다.

Python의 sscanf() 기능

sscanf() 메서드는 이미 제공된 문자열에서 문자열을 추출합니다. 다음은 메서드를 선언하는 방법입니다.

int sscanf(const char *str, const char *format, ...)

이 메서드는 본질적으로 문자열에서 형식화된 입력을 읽고 scanf()와 달리 sscanf()에 대한 데이터는 콘솔 대신 문자열에서 읽습니다. 데이터는 버퍼에서 메서드 선언의 인수로 제공된 위치 주소로 읽혀집니다.

제공된 모든 인수는 형식 문자열과 동일한 유형의 변수를 가리킵니다. 이 메서드는 성공적으로 변환 및 할당된 값을 반환합니다.

Python 자체에는 sscanf()에 직접 해당하는 라이브러리나 모듈이 없습니다. 그러나 기능을 모방하는 두 가지 방법이 있습니다.

re 라이브러리에서 정규식 사용

정규식은 문자열의 형식을 지정하거나 문자열의 형식을 설명하는 데 도움이 되며, 그런 다음 다른 문자열의 유효성을 검사하는 데 사용할 수 있습니다. 정규 표현식에는 특수 문자와 일반 문자가 포함될 수 있습니다.

A, B, b 또는 0과 같은 문자는 표현식에서 가장 간단한 일반 문자의 좋은 예입니다. 라이브러리는 특정 순서로 문자열 또는 문자 목록에서 특정 문자를 검색할 수도 있습니다.

제공된 문자열에서 def 문자열을 검색하는 아래 예제 스크립트를 살펴보십시오.

예제 코드:

import re

m = re.search("(?<=abc)def", "abcdef")
m.group(0)

프로그램은 def를 출력으로 반환합니다.

특수 문자로 구분된 문자열 내에서 문자열을 검색할 수도 있습니다. 예를 들어 아래 스크립트에서 하이픈 뒤에 제공된 단어를 검색합니다.

예제 코드:

m = re.search(r"(?<=-)\w+", "spam-emails")
m.group(0)

이에 대한 출력은 이메일입니다. re 구문 분석의 가능성은 무한합니다!

re와 유사한 또 다른 라이브러리는 API 친화적인 regex입니다. Regex는 re와 역호환되며 추가 기능이 함께 제공됩니다.

다음은 regex 모듈로 가능한 조건부 패턴 테스트입니다. 물론 이를 실행하기 전에 라이브러리를 가져와야 합니다.

예제 코드:

>>> regex.match(r'(?(?=\d)\d+|\w+)', '123abc')
<regex.Match object; span=(0, 3), match='123'>
>>> regex.match(r'(?(?=\d)\d+|\w+)', 'abc123')
<regex.Match object; span=(0, 6), match='abc123'>

뉴런 라이브러리 사용

Python 자체가 아닌 neuron 라이브러리를 사용하여 Python 스크립트에서 sscanf()를 가져올 수도 있습니다. 예를 들어, 다음 스크립트를 실행한다면,

from neuron import h

x = h.ref(0)
h.sscanf("0.3", "%f", x)
print(x[0])

결과 출력은 0.300000011921입니다.

다음은 neuron 라이브러리를 통해 Python에서 sscanf()의 사용을 이해하기 위해 살펴볼 수 있는 몇 가지 예입니다. 각 줄에 대한 출력은 주석으로 추가됩니다.

예제 코드:

from neuron import h as hoc

string = hoc.ref("")
range_list = [hoc.ref(0) for i in range(50)]
hoc.sscanf("This is a test\n", "%s", string)
print(string[0])
hoc.sscanf("This is a test\n", "%[^\n]", string)
print(string[0])
hoc.sscanf("This is a test\n", "%*s%s", string)
print(string[0])
hoc.sscanf(
    "1 2 3 4 5 6 7 8 9 10",
    "%f%f%f%f%f%f%f%f%f%f%f",
    range_list[0],
    range_list[1],
    range_list[2],
    range_list[3],
    range_list[4],
    range_list[5],
    range_list[6],
    range_list[7],
    range_list[8],
    range_list[9],
    range_list[10],
    range_list[11],
    range_list[12],
)
print("Should only have non-zero values for range_list indices 0 - 9")
for i in range(13):
    print("%d %g" % (i, range_list[i][0]))

위에서 설명한 두 옵션에서 관찰할 수 있듯이 시나리오에 따라 라이브러리를 사용할 수 있습니다. Python은 일반적으로 Python 고유의 방식으로 문자열을 구문 분석할 수 있는 광범위한 옵션을 제공하는 광범위하고 빠르게 입력되고 아름다운 언어입니다.

reregex 라이브러리는 언어의 방대함을 보여주는 예입니다.

Python에서 사용되는 sscanf() 함수의 기본 개념을 이해하는 데 이 기사가 도움이 되기를 바랍니다.

작가: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn