파이썬의 문자열 리터럴은 작은 따옴표 또는 큰 따옴표로 묶음 -> 작은 따옴표 또는 큰 따옴표 세 개를 연달아 입력하는 방법도 가능
간단한 문자열 만들어 보기 • “Hello” • ‘안녕하세요’ • '''문자열을 공부하고 있습니다.''' • """문자열을 공부하고 있습니다."""
문자열 내부에 따옴표를 넣으려면?
큰따옴표(작은따옴표) 안에 작은따옴표(큰따옴표)로 문자를 표기해야 함
""안에 ""을 넣는다면, 단순 문자열이 두 번 반복되는 걸로 파이썬 인터프리터는 이해함 예 : ""안녕"하세요" → “”, “하세요” 가 독립된 문자열로 인식됨. 안녕은 문자열로 인식도 안됨
혹은 이스케이프 문자 (역슬래쉬 \ 기호와 함께 사용, 한국어 키보드에서는 원화표시 ₩)를 함께 사용 예 : \', \''
문자열 연산
문자열 연산에도 숫자형과 비슷하게 +, * 연산을 적용할 수 있음
+ : 주어진 여러 문자열 연결 (합치기) 문자열 + 문자열 + ,,, + 문자열 (O) 문자열 + 숫자형 (X)
* : 주어진 문자열 반복 문자열 * 반복 횟수(숫자) 반복 횟수(숫자) * 문자열
문자열 연산에도 아래 복합대입연산을 적용할 수 있음
문자열 in 연산 문자열 내부에 어떤 문자열이 있는지 확인하려면 in 연산자를 사용할 수 있고, true/false를 반환해줌
문자열 인덱싱
문자열 내부적으로 보면 하나의 단어는 각각 하나의 인덱스(index)에 맵핑 될 수 있음
기본적인 인덱스는 0부터 시작되며, 해당 문자열의 길이-1까지 인덱스가 존재함 “안녕하세요”는 길이가 5이므로, 인덱스는 0~4까지 가능
문자열을 받은 변수 혹은 문자열 자체에 대해서 인덱스를 대괄호[]와 함께 사용해서 접근할 수 있음
인덱스는 양수뿐만 아니라 음수도 가능함
문자열 슬라이싱
주어진 문자열에 대해서 특정 문자 1개에만 접근할 수 도 있지만, 문자열의 범위를 선택해야 하는 경우도 있음 예 : 문자열의 두 번째 문자부터 다섯 번째 문자까지 선택하기
이렇게 부분 문자열을 추출하는 방법을 슬라이싱이라고 하며, 대괄호와 :을 통해서 표시할 수 있음
작성 방법: [ : ] -> [부분 시작 문자의 인덱스 : 부분 끝 문자의 인덱스 + 1] 예 : a[1:4] → 문자열 a의 부분 시작 문자의 인덱스 1부터 부분 끝 문자의 인덱스 3 → “녕하세” 선택
생략 슬라이싱 • 대괄호 안에 넣는 숫자 둘 중 하나를 생략하여 사용할 수 있음 예 : [1:] [: 3] • 뒤의 값 생략 시 가장 최대 위치 (마지막 글자)까지 지정 [1:] → [1:가장 마지막 글자 인덱스 + 1] • 앞의 값 생략 시 가장 최소 위치 (첫번째 글자)부터 지정 [:3] → [0:가장 마지막 글자의 인덱스인 2 + 1]
슬라이싱에서도 인덱싱과 같이 음수도 가능 • a[1:-2] → “녕하”
여기서도 뒷 인덱스는 원하는 끝 문자의 index보다 하나 커야 함 부분 끝 문자의 인덱스 -3 + 1 = -2 A[-5: -2] → “안녕하”
음수를 사용하는 슬라이싱에서도 앞/뒤 숫자 중 하나를 생략할 수 있음
뒤의 값 생략 시 가장 최대 위치 (마지막 글자)까지 지정 → a[-4:] 앞의 값 생략 시 가장 최소 위치 (첫번째 글자)부터 지정 → a[:-1]
슬라이싱시 아무런 숫자를 주지 않으면? 전체 문자열을 슬라이싱 함
문자열 관련 함수
문자열 길이 구하기
len() 함수
()안에 문자열을 넣으면 주어진 문자열의 문자 개수(=문자열의 길이)를 계산해서 돌려줌 예 : len(“안녕하세요”) → 5라는 숫자를 돌려줌
문자열에 공백이나 이스케이프 문자가 있을 경우 그것도 count하여 돌려줌
문자열 찾기
find()라는 함수는 입력으로 주는 argument 문자가 처음 나타나는 위치(index 값)를 반환해주는 작업을 함
format() 함수
“”로 묶인 문자열 안에 있는 중괄호{} 안의 문자가 format() 함수의 argument 로 주는 값으로 대치됨 예 : “제 나이는 {} 살 입니다.”.format(20) → {} 대신 20으로 대치가 됨
C언어나 Java 같은 프로그래밍 언어와 달리, 파이썬에서는 코드를 작성할 때 프로그래머가 자료형을 지정하지 않아도 됨
프로그래밍 시 자료형을 지정하지 않아도 되긴 하지만, 파이썬 내부에서는 자동으로 자료형을 정해줌 • 런타임(실행 시간) 시에 자료형이 결정됨 • 자동으로 지정된 자료형은 어떻게 확인할 수 있나? -> type( )이라는 함수를 통해서 확인할 수 있음 • 실행시켜 보기 전에는 오류를 검출하기 어렵지만, 유연하고 빠르게 코딩이 가능
숫자형(수치 자료형)
숫자형(number)이란 숫자 형태로 이루어진 자료형으로, 123 같은 정수, 12.3 같은 실수, 2진수, 8진수, 16진수 등이 있음
정수를 2, 8, 16진법으로 변화할 수 있는 함수(메소드) 및 표현
정수(int, integer)와 실수(float, floating point)
정수와 2/8/16진법 사이의 변환처럼, 서로 다른 데이터 타입 사이의 변환이 가능함
float(변수이름) → 변수이름의 자료형을 float로 변환
int(변수이름) → 변수이름의 자료형을 int로 변환
정수와 문자열 사이의 형변환
str(변수이름) → 변수이름의 자료형을 str로 변환
산술 연산자
정수/실수 혹은 실수/정수 나누기 값은 소수점을 포함할 수 있으므로 실수형 값 반환
관계 연산자
관계 연산자 적용에서도 정수(실수)와 문자형의 비교는 ‘같다’, ‘다르다’ 여부만 적용할 수 있음
복합대입연산자
연산과 할당을 합쳐놓은 것
식을 간결하게 표현할 수 있고, 변수가 이전에 가졌던 값을 수정하여 할당하는 일에 활용될 수 있음
연산자의 우선순위
괄호()가 가장 높은 우선순위를 갖음
곱셈 / 나눗셈 / 나머지 / 몫보다는 제곱이 더 높은 순위를 갖고, 할당/복합대입 연산이 가장 낮은 우선 순위를 갖음
파일 닫기는 기본적으로 close() 메소드를 이용하여 이루어지지만, 파일을 닫지 않았을 때, 닫히지 않은 파일 때문에 메모리가 계속 낭비되니 꼭 닫아줘야 한다. 아래의 내용은 프로그래머가 실수로 파일을 열고 닫지 않는 것을 방지하는 구문이다.
try - finally 구문 사용
파일을 열 때 오류가 발생되었을 때 사용한다.
finally구문은 오류가 나든 안 나든 무조건 실행되니, 파일을 확실히 닫을 수 있다.
try: # 예외가 발생할 가능성이 있는 작업들을 여기에 둔다.
infile = open("input.txt", "r", encoding = "UTF8") #input이 같은 위치에 있다 가정
#여러가지 파일 처리 작업 코드 작성
finally:# try블록에서 예외 발생시 프로그램 종료 전 반드시 실행된다.
infile.close( )
with구문 사용
with 명령문 내의 블록이 종료될 때 파일이 자동으로 닫힘
close() 메소드 호출이 필요 없다
with open("input.txt", "r", encoding = "UTF8") as infile:
line = infile.readline().rstrip()
while line != "" :
print(line)
line = infile.readline()
파일 읽고 쓰기
파일 읽기
한 줄씩 읽기
파일을 열었다면 readline 메소드를 이용하여 한 줄씩 읽을 수 있다.
파일 포인터는 파일의 첫 위치에 있다가 readline 메소드 실행 시 다음 줄로 이동한다.
infile = open("input.txt", "r", encoding = "UTF8") #input이 같은 위치에 있다 가정
line = infile.readline()
while line != "" :
print(line)
line = infile.readline()
#출력 결과
#홍길동
#
#김철수
코드에 보이는 encoding = "UTF8"은 뒤에서 설명하겠다.
이런 식으로 코드를 작성하면 출력 결과와 같이 줄 바꿈이 같이 출력된다.
그 이유는 line 변수 안에 줄 바꿈(\n)이 포함되어 있어서 그런 것이다.
이럴 때는 아래의 코드로 변경해보자
infile = open("input.txt", "r", encoding = "UTF8") #input이 같은 위치에 있다 가정
line = infile.readline().rstrip() #rstrip을 이용하여 오른쪽에 줄바꿈 문자와 같은 공백 제거
while line != "" :
print(line)
line = infile.readline().rstrip()
#출력 결과
#홍길동
#김철수
encoding = "UTF8" -> 인코딩 방식 설정 인코딩(Encoding)은 문자를 바이트로 변환하는 것, 디코딩(Decoding)은 바이트를 문자로 변환하는 것을 말한다 그리고 그 변환하는 방식에 UTF-8, CP949, ANSI 등등이 존재하는데 인코딩과 디코딩 방식이 서로 일치해야 프로그램이 정상적으로 읽어낼 수 있다. 인코딩 방식을 설정하지 않으면, 메모장의 인코딩 방식과 파이썬의 디코딩 방식이 일치하지 않아 오류가 발생한다.
통째로 읽기
파일을 한줄 씩 말고 통째로 읽을 수도 있다.
read()메소드를 이용하면 된다.
with open("input.txt", "r", encoding = "UTF8") as infile:
all = infile.read()
print(all)
파일이 무척 크다면 많은 양의 메모리를 필요로 하기 때문에 주의가 필요하다
한 글자씩 읽기
read() 메소드에 매개변수로 1을 입력하면 한 글자씩 읽는다
with open("input.txt", "r", encoding = "UTF8") as infile:
one = infile.read(1)
while one != "":
print(one)
one = infile.read(1)
#출력 결과
#홍
#길
#동
#
#
#김
#철
#수
파일 쓰기
“w”모드로 파일을 열었을 때 파일에 쓰기 가능
wirte() 메소드 사용
with open("input.txt", "w", encoding = "UTF8") as infile:
infile.write("ReBugs\n")
실행을 해보면 input.txt파일에 ReBugs라고 적혀있는 것을 볼 수 있다.
w모드는 기존에 있던 내용을 초기화하고 새로 쓰는 것을 인지하길 바란다.
이어서 쓰고 싶으면 a모드를 사용하면 된다.
또한 변수의 값을 문자열에 포함시켜서 쓸 수 있다.
with open("input.txt", "w", encoding = "UTF8") as infile:
url = "https://rebugs.tistory.com/"
infile.write(f"ReBugs 주소 : {url}\n")