여러 공백으로 나뉜 낱말이 필요하면 text.split(), 정확한 스페이스 한 글자로 나누며 빈 조각도 남겨야 하면 text.split(" ")를 쓰세요. 인수를 생략한 호출은 split(None)과 같은 공백 처리 규칙을 씁니다. " "를 명시하면 탭이나 줄바꿈은 구분자가 아닙니다.
아래 가상 문자열에는 앞쪽 스페이스 두 개, 낱말 사이 스페이스 두 개, 탭, 줄바꿈, 마지막 스페이스 한 개가 있습니다. repr()로 입력을 출력해 눈에 잘 보이지 않는 문자를 함께 확인합니다.
text = " red blue\tgreen\n "
print("입력", repr(text))
print("split()", text.split())
print("split(' ')", text.split(" "))
입력 ' red blue\tgreen\n '
split() ['red', 'blue', 'green']
split(' ') ['', '', 'red', '', 'blue\tgreen\n', '']
공백 묶음과 정확한 구분자는 다른 규칙입니다
split()은 연속된 공백 문자를 하나의 구분 구간으로 봅니다. 첫 출력에서는 탭과 줄바꿈도 낱말을 나누는 데 쓰였고, 양끝 공백 때문에 빈 문자열이 추가되지 않았습니다. 이 설명은 첫 예제처럼 분할 횟수를 제한하지 않은 경우입니다.
split(" ")은 스페이스가 나올 때마다 나눕니다. 앞의 스페이스 두 개는 빈 조각 두 개를 만들고, red 뒤의 연속 스페이스 사이에도 빈 조각이 남습니다. 탭과 줄바꿈은 지정한 구분자와 다르므로 'blue\tgreen\n' 안에 그대로 들어갑니다. 마지막 스페이스 뒤에도 빈 조각이 하나 생깁니다.
빈 조각을 모두 지우면 두 방식이 같아지는 것도 아닙니다. 첫 예제에서 빈 문자열만 걸러도 'blue\tgreen\n'은 하나의 조각으로 남습니다. 먼저 입력이 공백으로 구분한 낱말인지, 특정 구분자 사이의 빈 칸까지 의미가 있는 자료인지 정해야 합니다.
빈 입력과 공백만 있는 입력도 비교해 보세요
for text in ("", " ", "\t\n"):
print(repr(text), text.split(), text.split(" "))
'' [] ['']
' ' [] ['', '', '', '']
'\t\n' [] ['\t\n']
인수 없는 호출은 세 입력 모두 낱말이 없어 빈 리스트를 만듭니다. 스페이스를 명시한 호출은 빈 입력에서도 빈 문자열 하나를 담습니다. 스페이스 세 개는 그 사이와 양끝의 빈 조각 네 개가 되고, 탭·줄바꿈만 있는 문자열은 스페이스가 없으므로 나뉘지 않습니다.
maxsplit을 쓰면 남은 부분은 더 나누지 않습니다
두 호출 모두 maxsplit으로 분할 횟수를 제한할 수 있지만 공백 처리 규칙이 같아지지는 않습니다. 다음은 한 번만 나눕니다.
text = " red blue "
print("공백 묶음 1회", text.split(None, 1))
print("스페이스 1회", text.split(" ", 1))
try:
"red blue".split("")
except ValueError as error:
print(type(error).__name__)
공백 묶음 1회 ['red', 'blue ']
스페이스 1회 ['', ' red blue ']
ValueError
첫 줄은 앞 공백을 건너뛰고 red 다음에서 한 번 나눈 뒤 나머지를 남깁니다. 그래서 'blue '의 뒤쪽 스페이스는 유지됩니다. 둘째 줄은 첫 스페이스에서 바로 나누므로 첫 조각이 빈 문자열입니다. 빈 문자열 ""은 스페이스 한 글자 " "와 다르며, 구분자로 주면 위처럼 오류가 납니다.
구분자를 명시할 때는 여러 글자를 하나의 구분자로 쓸 수도 있습니다. 다만 따옴표 안의 쉼표나 줄바꿈까지 해석하는 CSV 규칙은 단순 split()의 기능이 아닙니다. 그런 입력은 CSV의 인용과 레코드를 파서로 읽는 방법을 따로 적용하세요.
가상 입력은 Windows의 CPython 3.14.3에서 각 코드 블록을 독립 실행했습니다. 구분자 유무·빈 입력·분할 횟수의 규칙은 Python의 str.split() 문서와 대조했습니다.
“파이썬 split()과 split(‘ ‘) 차이: 빈 문자열이 생기는 이유”에 대한 1개의 생각