240519_TIL
#08. String
1. 문자열 (str)
- 정의 : 문자열은 글자의 Unicode 코드로 이루어진 불변의 순서 있는 집합입니다.
- 표현 : "(쌍따옴표)와 '(작은따옴표)를 사용해 문자열을 나타낼 수 있습니다.
>>> "쌍따옴표 문자열"
'쌍따옴표 문자열'
>>> '작은따옴표 문자열'
'작은따옴표 문자열'
- 혼용불가
>>> "혼용하면 에러발생'
File "<stdin>", line 1
"혼용하면 에러발생'
^
SyntaxError: EOL while scanning string literal
- 큰따옴표 안에 작은따옴표, 작은따옴표 안에 큰따옴표를 사용할 수 있습니다.
>>> "It's a good thing"
"It's a good thing"
>>> '"Yes", he said, "I agree!"'
'"Yes", he said, "I agree!"'
3. 이스케이프 문자
- 이스케이프 문자를 막는 raw문자열을 문자열 앞에 r 을 붙여 만들 수 있습니다.
>>> a = r"이스케이프 문자 \n 라인이 바뀜 \\ 쌍따옴표를 또 쓰기 \"\" "
>>> print(a)
이스케이프 문자 \n 라인이 바뀜 \\ 쌍따옴표를 또 쓰기 \"\"
- 위와 같이 raw 문자열로 파일경로를 지정하면 역슬래시 \\ 두번 사용이나 / 슬래시 사용없이도 폴더경로를 복사 붙여넣기 하여 사용할 수 있습니다.
import pandas as pd
# 파일 경로를 raw 문자열로 지정
file_path = r"C:\Users\YourUsername\Documents\data\sample.csv"
# 파일 경로에 역슬래시를 두 번 사용
file_path = "C:\\Users\\YourUsername\\Documents\\data\\sample.csv"
# 파일 경로에 슬래시를 사용
file_path = "C:/Users/YourUsername/Documents/data/sample.csv"
# CSV 파일 읽기
df = pd.read_csv(file_path)
# 데이터 출력
print(df)
5. 컬렉션 접근
- String도 List와 같은 Collection 처럼 접근할 수 있습니다.
>>> s = 'abcdef'
>>> s[3]
'd'
6. String 여러가지 메소드
- 타입 확인
>>> type("문자열")
<class 'str'>
- 도움말
help(str)
- join : 문자열을 합치는데 사용합니다. 구분자가 앞에서 사용되어집니다.
>>> ','.join(['a','b','cde'])
'a,b,cde'
- split : join과 반대입니다. 문자열을 구분자로 나누어 리스트로 반환합니다.
>>> 'a,b,cde'.split(',')
['a', 'b', 'cde']
- partition : 구분자로 나누어 tuple형으로 반환합니다.
>>> departure, _, arrival = "Seattle-Seoul".partition('-')
>>> departure
'Seattle'
>>> _
'-'
>>> arrival
'Seoul'
- format : 문자를 다양한 형태로 포맷팅하는데 사용합니다.
- %-포맷팅 : "%s"와 같은 서식 지정자를 사용하여 포맷팅합니다.
- f-문자열 : 문자열 리터럴 앞에 f를 붙여 중괄호 {} 안에 변수와 표현식을 삽입합니다.
- str.format() 메소드 : 중괄호 {}와 format 메소드를 사용하여 포맷팅합니다.
import pandas as pd
name = "sample.csv"
folder = "data"
file_path = "C:\\Users\\YourUsername\\Documents\\%s\\%s" % (folder, name)
file_path = "C:/Users/YourUsername/Documents/{}/{}".format(folder, name)
file_path = f"C:/Users/YourUsername/Documents/{folder}/{name}"
df = pd.read_csv(file_path)
print(df)
# 문자열 포맷팅에 대한 역사적 배경, 기능적 필요, 편의성
더보기
문자열 포맷팅에는 다양한 방식이 존재하며 역사적 배경, 기능적 필요, 그리고 사용자의 편의성에 대해서 살펴보겠습니다. 각 방식은 특정한 장점과 단점을 가지고 있으며, 개발자는 상황에 따라 가장 적합한 방식을 선택할 수 있습니다.
1. 역사적 배경
- %-포맷팅
Python 초기 버전부터 존재했던 방식으로, C 언어의 printf 스타일 서식 지정에서 영감을 받았습니다. 이 방식은 오래된 코드베이스에서 여전히 많이 사용됩니다. - str.format() 메소드
%-포맷팅의 한계를 극복하고 더 강력하고 유연한 포맷팅 기능을 제공하기 위해 도입되었습니다. 이는 Python 2.7과 3.0에서 도입되었습니다. 포맷팅에 인덱스와 키워드를 사용할 수 있어 가독성이 높아졌습니다. - f-문자열
Python 3.6에서 도입된 가장 최신의 포맷팅 방식입니다. 기존 방식보다 더 간결하고 읽기 쉽습니다. 변수를 중괄호 안에 직접 삽입할 수 있어 가독성이 매우 뛰어납니다. 특히 디버깅이나 빠른 문자열 조작 시 유용합니다.
2. 기능적 필요
- %-포맷팅 : 간단한 포맷팅 작업에는 여전히 유용하며, C 스타일 서식을 선호하는 개발자에게 친숙합니다.
name = "철수"
age = 13
formatted_string = "Name: %s, Age: %d" % (name, age)
- str.format() 메소드: 복잡한 포맷팅 작업이나 가변적인 데이터를 처리할 때 유용합니다. 명시적인 인덱스와 키워드를 사용할 수 있습니다.
name = "영희"
age = 15
formatted_string = "Name: {}, Age: {}".format(name, age)
- f-문자열 : 간단하면서도 강력한 표현력을 제공합니다. 변수와 표현식을 중괄호 안에 직접 넣을 수 있습니다.
name = "민호"
age = 17
formatted_string = f"Name: {name}, Age: {age}"
3. 사용자의 편의성
- 다양한 포맷팅 방식을 제공함으로써, 개발자는 자신의 선호도와 상황에 맞는 방식을 선택할 수 있습니다.
- 오래된 코드베이스와의 호환성을 유지하면서도 새로운 기능을 사용할 수 있습니다.
- 각 방식은 상황에 따라 다른 가독성을 제공합니다. 예를 들어, f-문자열은 간결하고 직관적이지만, str.format() 메소드는 더 복잡한 포맷팅을 명확하게 처리할 수 있습니다.
- capitalize: 첫 글자 대문자 나머지 문자 소문자로 변환합니다.
>>> a = "abcDef"
>>> a.capitalize()
'Abcdef'
>>> a
'abcDef'
- strip : 좌우 공백을 제거 합니다.
>>> s = " abc "
>>> s.strip()
'abc'
>>> s
' abc '
- len : Str함수는 아니며, 일반 내장함수입니다. 문자열 길이 또는 컬렉션형의 길이를 나타냅니다.
>>> len("abcd12345abcdefg")
16
#09. Bytes
Bytes란?
파이썬에서 Bytes는 원시 이진 데이터를 처리하는 데 사용됩니다. 파일과 네트워크 리소스는 종종 바이트 스트림으로 전송되기 때문에, 이러한 데이터를 다루기 위해 Bytes가 필요합니다. Bytes는 유니코드가 아닌 문자열과 비슷하며, 각 문자는 1바이트로 고정됩니다.
>>> b = b'abcde'
>>> b
b'abcde'
>>> print(b)
b'abcde'
>>> type(b)
<class 'bytes'>
바이트 문자열을 분할(split)하면, 요소는 여전히 바이트 형식으로 남습니다:
>>> s = b'abc def ghi'
>>> s.split()
[b'abc', b'def', b'ghi']
문자열과 바이트 변환하기
문자열을 바이트로 변환하려면 encode 메서드를 사용하고, 바이트를 다시 문자열로 변환하려면 decode 메서드를 사용합니다.
>>> s = 'Vi er så glad for å høre og lære om Python!'
>>> b = s.encode('utf-8')
>>> b
b'Vi er s\xc3\xa5 glad for \xc3\xa5 h\xc3\xb8re og l\xc3\xa6re om Python!'
>>> b.decode('utf-8')
'Vi er så glad for å høre og lære om Python!'
실제 활용 사례
- 파일 처리: 특히 이미지나 실행 파일과 같은 이진 파일을 읽거나 쓸 때 사용됩니다.
- 네트워크 통신: HTTP 응답이나 소켓 통신과 같이 데이터를 네트워크를 통해 송수신할 때, 데이터는 바이트로 전송됩니다. 바이트를 이용하여 데이터 무결성을 다양한 시스템 및 프로토콜 간에 유지할 수 있습니다.
- 데이터 직렬화: JSON이나 XML과 같은 프로토콜을 사용하여 데이터 구조를 저장하거나 전송할 때, 일관된 인코딩을 보장하기 위해 바이트가 사용됩니다.
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('example.com', 80))
request = b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n'
sock.sendall(request)
response = sock.recv(4096)
print(response) # 원시 HTTP 응답을 출력합니다.
sock.close()
240520_TIL
240521_TIL
#11. List(리스트)(2) - 리스트 인덱싱, 리스트 슬라이싱
#12. 얕은 복사(shallow copy)와 깊은 복사(deep copy)
240523_TIL
메서드(method), 객체(object)란? 메서드와 함수의 차이점은?
'TIL > 2024TIL' 카테고리의 다른 글
2024_0529_TIL (0) | 2024.05.29 |
---|---|
24-05-26~06-01_TIL (0) | 2024.05.26 |
24-05-12~18_TIL (0) | 2024.05.18 |