1. format()
특징
- 문자열 내에서 중괄호 {}를 사용하여 자리 표시자를 정의하고, 이 자리 표시자에 값을 삽입하는 방식으로 문자열을 포맷팅하는 기능을 제공한다.
- 다양한 형식 지정 옵션을 통해 숫자나 문자열을 원하는 형식으로 변환할 수 있다.
예제
# 기본 사용법
name = "Alice"
age = 30
formatted_string = "My name is {} and I am {} years old.".format(name, age)
print(formatted_string) # My name is Alice and I am 30 years old.
# 위치 인수 사용
formatted_string = "My name is {0} and I am {1} years old.".format(name, age)
print(formatted_string) # My name is Alice and I am 30 years old.
# 키워드 인수 사용
formatted_string = "My name is {name} and I am {age} years old.".format(name="Alice", age=30)
print(formatted_string) # My name is Alice and I am 30 years old.
# 숫자 형식 지정
value = 1234.56789
formatted_string = "Value: {:.2f}".format(value)
print(formatted_string) # Value: 1234.57
# 정렬 및 패딩
formatted_string = "|{:<10}|{:^10}|{:>10}|".format("left", "center", "right")
print(formatted_string) # |left | center | right|
주의사항
- 빈 괄호와 숫자가 들어간 괄호를 동시에 사용할 수 없다. 즉, {}와 {0}를 같은 문자열에서 함께 사용할 수 없다.
- 숫자 자료형과 문자열 자료형의 구분: 숫자 포맷팅을 할 때는 반드시 숫자 자료형이어야 하며, 문자열로 된 숫자는 사용할 수 없다.
- 포맷팅 순서: 위치 인수를 사용할 때는 format() 내의 값들이 지정된 순서대로 대체되므로, 순서를 정확히 맞춰야 한다.
실제 프로젝트에서 format()을 사용하면서 가장 많이 겪은 실수는 위치 인수와 키워드 인수를 혼용하는 것이었다. 이로 인해 예상치 못한 결과가 나오는 경우가 많았다. 또한, 복잡한 포맷팅을 할 때는 f-string을 사용하는 것이 더 편리하다는 것을 깨달았다.
2. zfill()
특징
- 문자열의 왼쪽에 '0'을 채워 지정된 길이의 문자열을 만든다.
- 숫자 형식의 문자열을 일정한 길이로 맞출 때 유용하다.
zfill()은 처음에는 그다지 유용해 보이지 않았지만, 실제로 파일명을 생성하거나 로그 포맷을 맞출 때 매우 유용하게 사용했다. 특히 시계열 데이터를 다룰 때 이 메소드의 가치를 실감했다.
예제
num = "42"
print(num.zfill(5)) # 출력: '00042'
주의사항
# 원본 문자열의 길이가 지정된 길이보다 길면 아무 변화가 없다.
print("123456".zfill(4)) # 출력: '123456'
# 음수 부호가 있는 경우, 부호 다음에 '0'이 채워진다.
print("-42".zfill(5)) # 출력: '-0042'
zfill()을 사용할 때 가장 주의해야 할 점은 음수 처리다. 처음에는 음수 부호가 무시될 것이라고 생각했지만, 실제로는 부호를 유지하면서 0을 채운다는 점을 알게 되었다. 이는 숫자 데이터를 다룰 때 매우 유용한 특성이었다.
3. replace(바꿀값,새로운값)
특징
- 문자열 내의 특정 부분을 다른 문자열로 교체한다.
- 모든 일치하는 부분을 교체한다.
replace()는 단순해 보이지만, 실제로 텍스트 처리에서 굉장히 자주 사용했다. 특히 데이터 클리닝 작업에서 이 메소드의 중요성을 깨달았다. 하지만 대규모 텍스트에서는 성능 이슈가 있어, 정규표현식을 사용하는 것이 더 효율적인 경우도 있었다.
예제
text = "Hello, World!"
print(text.replace("World", "Python")) # 출력: 'Hello, Python!'
주의사항
# 대소문자를 구분한다.
print("Hello, World!".replace("world", "Python")) # 출력: 'Hello, World!'
# 세 번째 인자로 교체 횟수를 제한할 수 있다.
print("Hello, Hello, Hello".replace("Hello", "Hi", 2)) # 출력: 'Hi, Hi, Hello'
replace()를 사용하면서 가장 많이 겪은 실수는 대소문자 구분을 간과하는 것이었다. 이로 인해 예상치 못한 결과가 나오는 경우가 많았다. 대소문자를 구분하지 않고 교체하고 싶을 때는 정규표현식을 사용하는 것이 더 적합하다는 것을 알게 되었다.
4. strip(), rstrip(), lstrip()
특징
- strip(): 문자열의 양쪽 끝에서 특정 문자(기본은 공백)를 제거한다.
- rstrip(): 오른쪽 끝에서만 특정 문자(기본 공백)를 제거한다.
- lstrip(): 왼쪽 끝에서만 특정 문자(기본 공백)를 제거한다.
이 메소드들은 데이터 정제 작업에서 필수적이다. 특히 사용자 입력이나 외부에서 받은 데이터의 불필요한 공백을 제거할 때 매우 유용하다. 하지만 너무 맹목적으로 사용하면 실제 데이터까지 삭제될 수 있어 주의가 필요하다.
예제
text = " Python "
print(text.strip()) # 출력: 'Python'
print("...Python...".rstrip(".")) # 출력: '...Python'
print("...Python...".lstrip(".")) # 출력: 'Python...'
text2 = "!!!Python!!!"
print(text2.rstrip("!")) # 출력: '!!!Python'
주의사항
# 문자열 중간의 문자는 제거되지 않는다.
print(" Py thon ".strip()) # 출력: 'Py thon'
# 인자로 여러 문자를 전달하면, 그 문자들의 조합을 제거한다.
print("www.example.com".strip("wcmo.")) # 출력: 'example'
5. index() 와 find()
특징
- 둘 다 문자열에서 특정 부분 문자열의 시작 인덱스를 찾는다.
- index(): 찾지 못하면 ValueError를 발생시킨다.
- find(): 찾지 못하면 -1을 반환한다.
예제
text = "Hello, World!"
print(text.index("World")) # 출력: 7
print(text.find("Python")) # 출력: -1
주의사항
# index()는 예외 처리가 필요할 수 있다.
try:
print("Hello".index("x"))
except ValueError:
print("Not found") # 출력: Not found
# 대소문자를 구분한다.
print("Hello".find("he")) # 출력: -1
6. upper(), lower(), capitalize()
특징
- upper(): 모든 문자를 대문자로 변환한다.
- lower(): 모든 문자를 소문자로 변환한다.
- capitalize(): 첫 글자만 대문자로, 나머지는 소문자로 변환한다.
이 메소드들은 문자열 정규화에 매우 유용하다. 특히 사용자 입력이나 데이터베이스의 대소문자 불일치 문제를 해결하는 데 자주 사용했다.
예제
text = "Hello, World!"
print(text.upper()) # 출력: HELLO, WORLD!
print(text.lower()) # 출력: hello, world!
print("hELLO, wORLD!".capitalize()) # 출력: Hello, world!
주의사항
# 원본 문자열은 변경되지 않고 새로운 문자열을 반환한다.
original = "Hello"
upper_case = original.upper()
print(original) # 출력: Hello
print(upper_case) # 출력: HELLO
# capitalize()는 첫 글자만 대문자로 만들고 나머지는 모두 소문자로 만든다.
print("hELLO wORLD".capitalize()) # 출력: Hello world
7. count()
특징
- 문자열 내에서 특정 부분 문자열의 등장 횟수를 반환한다.
예제
text = "Hello, Hello, Hello, World!"
print(text.count("Hello")) # 출력: 3
주의사항
# 대소문자를 구분한다.
print("Hello, hello".count("Hello")) # 출력: 1
# 검색 범위를 지정할 수 있다.
print("Hello, Hello, Hello".count("Hello", 7)) # index 7부터 count, 출력: 2
대소문자 구분 때문에 몇번 삽질했던 기억이 있다. 대소문자를 무시하고 카운트하고 싶다면 lower()나 upper()와 함께 사용해야 한다.
8. split()
특징
- 문자열을 특정 구분자(기본은 공백)를 기준으로 나누어 리스트로 반환한다.
예제
text = "apple,banana,orange"
print(text.split(",")) # 출력: ['apple', 'banana', 'orange']
주의사항
# 구분자가 연속으로 나타나면 빈 문자열이 포함될 수 있다.
print("a,,b,c".split(",")) # 출력: ['a', '', 'b', 'c']
# 최대 분할 횟수를 지정할 수 있다.
print("a,b,c,d".split(",", 2)) # 출력: ['a', 'b', 'c,d']
9. center(), ljust(), rjust()
특징
- center(): 지정된 길이의 문자열 중앙에 원본 문자열을 위치시킨다.
- ljust(): 왼쪽 정렬하여 지정된 길이의 문자열을 만든다.
- rjust(): 오른쪽 정렬하여 지정된 길이의 문자열을 만든다.
예제
text = "Python"
print(text.center(20, "-")) # 출력: -------Python-------
print(text.ljust(10, "*")) # 출력: Python****
print(text.rjust(10, "*")) # 출력: ****Python
주의사항
# 지정된 길이가 원본 문자열보다 짧으면 원본 그대로 반환된다.
print("Python".center(4)) # 출력: Python
# 두 번째 인자(채울 문자)를 지정하지 않으면 기본값은 공백이 된다.
print("Python".center(10)) # 출력: Python
'프로그래밍 > 파이썬' 카테고리의 다른 글
파이썬 - 컴프리헨션 (0) | 2024.11.27 |
---|---|
파이썬 - 튜플 개념 정리 (0) | 2024.11.26 |
파이썬 - 리스트 메서드 정리 (0) | 2024.11.25 |
파이썬의 자료형 (0) | 2024.11.24 |
파이썬의 기원과 철학, 특징 (1) | 2024.11.24 |