입출력 / 파일 읽고 쓰기
input()
- 파이썬에서 데이터 입력을 받을때 사용
- 입력받은 후에 필요한 데이터 형태로 변환해주는 작업이 필요
- input은 입력되는 모든 것을 문자열로 취급
ex)
a = input()
I can do it, more more
a
'I can do it, more more'
ex)
input("질문 내용")
number = input("숫자를 입력하세요: ")
숫자를 입력하세요:
프롬프트에 3을 입력하면 변수 number 3이 대입
number = input("숫자를 입력하세요: ")
숫자를 입력하세요 : 3
print(number)
3
** number는 숫자가 아닌 문자열 **
type(number)
<class 'str>
큰따움표(")로 둘러싸인
문자열은 + 연산과 동일함.
ex)
print("I" "can" "do it")
Icando it
print("I"+"can"+"do it")
Icando it
문자열 띄어쓰기는 콤마로 한다.
print("I", "can", "do it")
I can do it
한 줄에 결과값 출력하기
for문을 활용하여 결과값을 계속 이어서 출력하려면 매개변수 end를 사용해야함.
ex)
for i in range(10):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
소수 판별 알고리즘
소수
2보다 큰 자연수 중에서 1과 자기 자신을 제외한 자연수로는 나누어떨어지지 않는 자연수
ex)
# 기본적인 소수 판별 방법(2부터 n-1까지 돌려보기)
def is_prime_number(x):
# 2부터 (x -1)까지의 모든 수를 확인
for i in range(2, x):
# x가 해당 수로 나누어 떨어지면
if x % i == 0:
return False
return True
print(is+prime_number(4)) # False
파일 생성하기
f = open("새 파일.txt", 'w')
f.close()
open()
- "파일 이름"과 "파일 열기 모드"를 입력값으로 받고 결과값으로 파일 객체를 돌려줌.
- 파이썬의 내장 함수.
open()의 파일 열기 모드
- r : 읽기모드
- w : 쓰기모드
- a : 추가모드
ex)1
f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
========================
ex)2
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
print(data)
두 프로그램의 다른 점은 data를 출력하는 방법
첫번째 방법은 모니터 화면 대신 파일에 결과값을 적는 방법
두번째 방법은 우리가 계속 사용해 왔던 모니터 화면에 출력하는 방법
두 방법의 차이점은
print 대신 파일 객체 f의 write 함수를 사용
명령 프롬프트 창에 첫번째 예제를 실행해보면
C:\Users> cd C:\doit
C:\doit>python writedata.py
C:\doit>
readline 함수
# readline_test.py
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
↓↓
위 예는 f.open("새파일.txt", 'r)로 파일을 읽기 모드로 연 후에
redaline() 을 사용해서 파일의 첫 번째 줄을 읽어 출력하는 경우이다.
앞에서 만든 새파일.txt를 수정하거나 지우지 않았다면
위 프로그램을 실행했을 때 새파일.txt의 가장 첫 번째 줄이 화면에 출력될 것임.
↓↓
1번째 줄입니다.
만약 모든 줄을 읽어서 화면에 출력하고 싶다면
↓↓
# readline_all.py
f = open("C:/doit/새파일.txt", 'r')
while True:
line = f.readline()
if not line: break
print(line)
f.close()
↓↓
즉, while True: 무한 루프 안에서 f.readline() 을 사용해 파일을 계속해서 한 줄씩 읽어 들인다.
만약 더 이상 읽을 줄이 없으면 break를 수행한다.
(readline()은 더 이상 읽을 줄이 없을 경우 빈 문자열("")을 리턴함)
while True:
data = input()
if not data: break
print(data)
유니코드(Unicode)
- 전 세계의 모든 문자를 처리 가능하도록 설계된 방식
- utf-8도 unicode에 기반한 인코딩 방식
- 1바이트로는 부족했으니 용량을 크게 확장한 2바이트(2^16 = 65,536)를 사용
- 문제점 : 어떠한 글자들을 1바이트, 2바이트로 읽을지 정해줘야함
- ↓
- 문제점을 보완하기 위해 인코딩 방식이 존재함.
인코딩
- 컴퓨터가 어떤 글자를 만났을 때 얼만큼씩 읽어야 하는지 미리 말해주는 것
- UCS-2 / UCS-4 = 코드 포인트를 코드화한 방식
- UTF-8 / UTF-7 / UTF-16 / UTF-32 = 변환 인코딩 형식
UTF-8
- 8-bit Unicode Transformation Format
- 문자열집합과 인코딩 형태를 8비트 단위로 한다는 의미
- 유니코드 한 문자를 나타내기 위해서는 1바이트 ~ 4바이트까지 사용
- 이를 가변형 인코딩 방식이라 부르는데
- 아스키문자들은 1바이트로 하나의 문자를 표현할 수 있는데,
- 모든 문자를 4바이트를 사용한다면 지나친 저장소의 낭비가 됨.
- → 따라서 아스키코드로 표현 가능한 것들은 1바이트로 표현하고
- → 그것이 안된다면 2바이트 이상을 사용하는 방식이 UTF-8
with문
with <compress> as <variable>:
<block>
파일을 열었으면 닫아주는 일을 빼먹지 말아야 하는데,
보통은 close() 등과 같은 메소드를 사용하지만 여기에는 숨은 문제점이 존재함.
파일 처리를 수행하는 도중에 오류가 발생하게 되면 close()문을 실행할 수 없고
그렇게 되면 이 파일은 영원히 닫을 수가 없게 됨.
with 문은 그 구문을 실행했을 때 오류가 발생하든 안하든 마지막에 close를 해주는 것.
ex)
with open('textfile.txt', 'r') as file:
contents = file.read()
# 위 구문과 동일한 내용
file = open('textfile.txt', 'r')
contents = file.read()
file.close()
예외처리 ★
추 후에 추가 정리 필요!
=기본형태=
try:
...
except [발생 오류[as 오류 메시지 변수]]:
...
- try 블록 수행 중 오류가 발생하면 except 블록이 수행됨.
- 하지만 try 블록에서 오류가 발생하지 않는다면 except 블록은 수행되지 않음.
- (발생 오류와 오류 메시지 변수까지 포함한 except문)
ex)
try:
4 / 0
except ZeroDivisionError as e:
print(e)
위처럼 4를 0으로 나누려고 하면 ZeroDivisionError가 발생하여
except 블록이 실행되고 변수 e에 담기는 오류 메시지를 다음과 같이 출력.
= 결과값: division by zero
try .. finally
- try문에서는 finally절을 사용할 수 있음.
- finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행됨.
- 보통 finally절은 사용한 리소스를 close 해야 할 때 많이 사용됨.
ex)
f = open('foo.txt', 'w')
try:
# 무언가를 수행한다.
finally:
f.close()
↓↓
foo.txt 파일을 쓰기 모드로 연 후에 try문을 수행한 후
예외 발생 여부와 상관없이 finally절에서 f.close()로 열린 파일을 닫을 수 있다.
Byte Order Mark = BOM
파일이 어떤 인코딩으로 저장되었는지를 나타내는 하나의 사인
ord('가')
'가'에 해당하는 유니코드 10진수 값
hex(x)
x에 해당하는 16진수 값
bin
이진수로 바꾸는것
'기초 물방울 > Python' 카테고리의 다른 글
파이썬 if~While~for문 #3 (0) | 2022.05.27 |
---|---|
파이썬 튜플~딕셔너리~변수 #2 (0) | 2022.05.09 |
Python 자료형~문자형~리스트 정리 #1 (0) | 2022.05.03 |
파이썬(Python) 공부 기록#2 [for while if 등..] (0) | 2022.03.21 |
Python 기초 공부 #1 [변수~형변환] (0) | 2022.03.20 |