1. 입력
지금까지 우리는 print를 통해서 값을 출력하는 것만 해보았다.
이번엔 직접 입력해보자
number = input()
number라는 변수는 입력받은 값이다.
실제로 실행해보면 값을 입력하라는 말이 나온다.
근데 이대로 사용하면 아무런 말도 없이 컴퓨터가 그저 입력받기를 기다린다.
조금 다듬어보자
number = input('숫자를 입력해 주세요')

숫자를 입력해 달라는 메시지와 함께 입력을 기다리고 있는 모습을 볼 수 있다.
그리고 입력하고 엔터를 누르면 그대로 끝난다.
입력받고 뭔가 하라는 지시가 없으니 어찌보면 당연한 것
이번엔 입력받은 값을 어떻게 해든 사용해보자
number = input('숫자를 입력해 주세요 > ')
print(number * 5)
입력받은 값을 5를 곱한 값을 출력하도록 지시했다.
겸사겸사 내용도 살짝 바꾸어주었다.
그렇다면 10을 입력하면 50이 나올 것이다.

그러나 실제로 나오는건 10을 5번 출력한 것이 나왔다.
이는 입력받은 값을 숫자가 아닌 문자열로 인식했기 때문에 발생하는 문제다.
입력받은 값을 숫자로 해주자
number = int(input('숫자를 입력해 주세요 > '))
print(number * 5)

이제 정상적으로 나온다.
단, 숫자가 아닌 문자를 입력할 경우 에러가 발생하므로 주의하자
2. 다중입력
한 번에 두개의 값을 받아보자
a, b= input('두 영단어를 입력하세요 > ').split()
print(a)
print(b)
약간 편법을 사용해서 두개의 값을 받아보았다.
이것은 입력 받은 값을 공백을 기준으로 나누어서 각각 a와 b에 할당하는 방식이다.
그런데 이건 입력 받은 값에 공백이 없거나 2개 이상이면 에러가 난다.
이번엔 다중입력을 제대로 받아보자
inputs = list(map(str, input('뭐든지 입력해보거라 > ').split()))
print(inputs)

위 코드는 띄어쓰기를 기준으로 나누어서 입력받고 그렇게 받은 값을 리스트에 넣는 코드다
"가나 초콜릿 맛있어"를 입력하자 가나, 초콜릿, 맛있어 로 나뉘어서 값을 받은 것을 알 수 있다.
문자열이 아닌 정수를 얻고 싶다면 위 코드에서, str 대신 int를 받아주면 된다.
당연하겠지만 int로 바꿔준 상태에서 문자를 입력하면 에러가 난다.
3. 파일 입출력
코드만으로 txt 파일을 만들어보자
file = open('sample.txt', 'w', encoding='utf-8')
file.write('안녕하세요~')
file.write('첫번째 파일!!')
file.close()
print('sample.txt 파일이 만들어졌습니다')
만들고자 하는 파일의 이름은 sample.txt이며
파일을 새로 만들며
인코딩은 uft-8로 한다.
인코딩을 정해주지 않을 경우, 아스키코드로 인코딩 되는데
이러면 한글이 몽땅 다 깨져버리므로 반드시 utf-8로 해주자
open의 두번째 파라미터를 보면 w라고 되어 있는데
이는 새로 만드는 것을 의미한다.
만약 w가 아닌 a로 할 경우, 기존의 내용에 추가하는 형태로 작성된다.
즉, a로 하고 이 코드를 여러번 실행할 경우, "안녕하세요~ 첫번째 파일!!"이라는 문자열이 여러개 생긴 것을 볼 수 있다.
3-1. 파일 경로
그런데 파일이 생성되는 경로를 지정해 주지 않았다.
이 경우, 실행 경로에 파일이 생성되는데, 이번엔 내가 원하는 경로에다가 파일을 생성해 보자
file2 = open('C:/DEV/sample01.txt', 'w', encoding='utf-8')
file2.write('안녕하세요~\n')
file2.write('두번째 파일이다.\n')
file2.write('절대경로 파일\n')
file2.close()
print('sample01.txt가 생성되었습니다.')

DEV 폴더에 sample01 파일이 생성된 것을 확인할 수 있다.
그런데 이건 절대경로로 파일을 생성한 것이고 경우에 따라 상대경로로 파일을 만들어야할 필요가 있다.
상대경로를 만들기 전에, 잠시 디렉토리를 살펴보자

최상위 폴더는 STUDYPYTHON2023이고 그 안에 Day01, Day02, Day03, Day04, Day05 폴더가 있으며
파일 생성 코드는 Day05폴더의 code33_fileio.py에 있다.
그 파일에는 다음의 코드가 있다.
file3 = open('./Day05/../Day04/sample05', 'w', encoding='utf-8')
file3.write('안녕하세요~\n')
file3.write('두번째 파일이다.\n')
file3.write('상대경로 파일\n')
file3.close()
print('sample05.txt가 생성되었습니다.')
이 파일을 실행하면 sample05파일이 어디에 생성될까?

Day04 폴더에 생성된 것을 볼 수 있다.
./는 실행하는 지금의 위치인 STUDYPYTHON2023 폴더를 말하고 여기서 Day05에 들어갔다.
../는 현 경로에서 위로 올라가는 것을 말하는데 Day05폴더에서 ../를 했으므로 다시 STUDYPYTHON2023 폴더로
돌아왔다.
여기서 다시 Day04폴더로 들어가서 파일을 생성했으므로 Day04폴더에 파일이 생성되는 것이다.
3-1. 파일 읽기
바로 위에서 생성한 sample05.txt를 읽어와 보자
file = open('./Day04/sample05.txt', 'r', encoding='utf-8')
text = file.readline()
print(text)
while True:
text = file.read()
if not text: break
print(text)
file.close()
# 실행결과
# 안녕하세요~
# 두번째 파일이다.
# 상대경로 파일
이번엔 open메소드의 파라미터에서 r을 사용한 것을 알 수 있다.
마지막의 file.close()는 꼭 해주어야 한다.
그나마 파이썬에선 해주지 않아도 알아서 닫아지는것 같으나 타 언어에선 그러지 않는 모양이며
닫지 않을 경우, 다음에 열 때 문제가 있을 수 있다고 한다.
고로 한 번 열었던 파일은 늘 닫아주자
'Language > Python' 카테고리의 다른 글
| Python 공부정리 - 콘솔출력(추가) (0) | 2023.02.06 |
|---|---|
| Python 공부정리 - 예외처리 (0) | 2023.02.03 |
| Python 공부정리 - 패키지, 모듈 (0) | 2023.02.03 |
| Python 공부정리 - 객체지향, 클래스 (0) | 2023.02.02 |
| Python 공부정리 - 가상환경 (0) | 2023.02.02 |










