goodthings4me.tistory.com
파이썬에서 값을 입력받는 input() 함수와 파일 단위로 입출력하는 open() 함수에 대해 정리한 자료임
입력은 키보드나 마우스를 통해 값을 받거나 파일을 읽어오는 것을, 출력은 프린터나 모니터 상으로 값을 내보내고 그 값을 표현하는 것과 파일을 저장하는 것을 말함
파이썬 input() 함수 사용
사용자가 입력한 값을 받는 input() 함수 사용 방법이며, input()으로 입력받은 값의 타입은 문자열임
▶ input()으로 정수, 실수, 문자열 입력 받기
## 입력 값은 문자열 타입
text = input('내용을 입력하세요> ')
print(text, type(text))
### 실행결과 ###
내용을 입력하세요> 사과
사과 <class 'str'>
## 정수를 입력받고 정수 타입으로 변경하기
int1 = input('정수를 입력하세요> ')
int1 = int(int1)
print(int1, type(int1))
### 실행결과 ###
정수를 입력하세요> 234
234 <class 'int'>
## 실수를 입력받고 실수 타입으로 변경하기
float1 = input('실수를 입력하세요> ')
float1 = float(float1)
print(float1, type(float1))
### 실행결과 ###
실수를 입력하세요> 3.14
3.14 <class 'float'>
▶ 입력 받기 연습
- 두 수를 입력받아 덧셈하기
## 두 숫자를 입력하고 덧셈 결과를 출력하기
num1 = input('첫번째 숫자 입력> ')
num2 = input('두번째 숫자 입력> ')
print(f'{float(num1)} + {float(num2)} = {float(num1) + float(num2)}')
### 실행결과 ###
첫번째 숫자 입력> 20
두번째 숫자 입력> 14.6
20.0 + 14.6 = 34.6
- 두수 입력받아 사칙연산 계산하고 출력하기
strs = input('아무 숫자나 2개 입력(입력값 구분은 콤마, 예시: 3.14, 3)> ')
print(strs)
strs2 = strs.split(',')
print(strs2)
plus = float(strs2[0].strip()) + float(strs2[1].strip())
minus = float(strs2[0].strip()) - float(strs2[1].strip())
mul = float(strs2[0].strip()) + float(strs2[1].strip())
div = float(strs2[0].strip()) / float(strs2[1].strip())
print(plus, minus, mul, div)
### 실행결과 ###
아무 숫자나 2개 입력(입력값 구분은 콤마, 예시: 3.14, 3)> 4.24, 53
4.24, 53
['4.24', ' 53']
57.24 -48.76 57.24 0.08
- 반복문으로 문자 입력받아 출력하기
## 반복문으로 문자를 입력받고 출력하기 (단, End 문자를 입력받으면 반복 종료)
input_str = []
while True:
strs = input("문자를 입력하시오(종료: 'q' or 'Q' 입력)> ")
if strs in ('q', 'Q'):
print('입력을 종료합니다.')
break
if strs not in ('q', 'Q'):
input_str.append(strs)
print(input_str)
for ch in input_str:
print(ch)
### 실행결과 ###
문자를 입력하시오(종료: 'q' or 'Q' 입력)> 반복문으로
문자를 입력하시오(종료: 'q' or 'Q' 입력)> 문자를
문자를 입력하시오(종료: 'q' or 'Q' 입력)> 입력받고
문자를 입력하시오(종료: 'q' or 'Q' 입력)> 출력하기
문자를 입력하시오(종료: 'q' or 'Q' 입력)> 100번
문자를 입력하시오(종료: 'q' or 'Q' 입력)> 코딩하기
문자를 입력하시오(종료: 'q' or 'Q' 입력)> q
입력을 종료합니다.
['반복문으로', '문자를', '입력받고', '출력하기', '100번', '코딩하기']
반복문으로
문자를
입력받고
출력하기
100번
코딩하기
▶ 파이썬 출력
## 특정 값을 출력하기
num = 123
print(num)
# 123
s = 'python'
print(s)
# python
list1 = [1, 2, 'a', 'b']
print(list1)
# [1, 2, 'a', 'b']
dict1 = {'a': 1, 'b': 2, 'c': 3}
print(dict1)
# {'a': 1, 'b': 2, 'c': 3}
## 콤마(,)를 이용해서 여러 값 출력
print(num, s, list1, dict1)
# 123 python [1, 2, 'a', 'b'] {'a': 1, 'b': 2, 'c': 3}
## 코드의 결과값을 바로 출력
print(1 + 2)
# 3
print([i for i in range(10)])
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
## print() 함수의 분리 문자 sep=, 맺음 문자 end= 속성 사용하기
print(1, 2, 3, 4, 5, sep = '/')
# 1/2/3/4/5
print(1, end = ' ')
# 1
print(2, end = '-')
# 2-
print(3)
# 3
▣ 반복문과 print 함수 사용하여 별표 찍기
## 연습문제 별표 찍기 - 반복문과 print 함수를 사용하여 별표 찍기
for i in range(1, 6):
for j in range(1, 6):
if i == j:
print('*' * i)
### 출력결과 ###
*
**
***
****
*****
for i in range(1, 6):
for j in range(5, 0, -1):
if i == j:
print('*' * i)
### 출력결과 ###
*
**
***
****
*****
for i in range(1, 6):
for j in range(1, i + 1):
print('*', end='')
print()
### 출력결과 ###
*
**
***
****
*****
for i in range(1, 6):
print('*' * i)
### 출력결과 ###
*
**
***
****
*****
cnt = 1
for i in range(5, 0, -1):
print(f"{' ' * (i-1)}{'*' * cnt}")
cnt += 1
### 출력결과 ###
*
**
***
****
*****
cnt = 0
for i in range(5, 0, -1):
print(f"{' ' * cnt}{'*' * i}")
cnt += 1
### 출력결과 ###
*****
****
***
**
*
cnt = 0
for i in range(5, 0, -1):
print(f"{'*' * i}{' ' * cnt}")
cnt += 1
### 출력결과 ###
*****
****
***
**
*
파이썬 open() 함수 사용
파일 입출력 시 많이 활용하는 open() 함수는 파일을 열거나 생성함
파일객체 = open('파일명', 모드)
※ 모드의 종류
- r : 읽기 - 파일의 내용을 읽기만 할때 사용(기본값)
- w / x : 쓰기 - 파일의 내용을 쓰기만 할때 사용
- a : 추가 - 파일의 마지막 부분에 내용을 추가할 떄
- + : 읽기/쓰기 + 텍스트/바이너리 r+, w+
- t : 텍스트 모드(기본값)
- b : 바이너리(이진) 모드
☞ open()의 디폴트는 r모드이며, 기본 r, w, a와 더불어서 +, t, b를 붙여서 사용할 수 있는데 r+, w+, a+, rt, wt, at, rb, wb, ab 등으로 사용 가능하고, rt, wt, at에서 t는 기본값이기 때문에 생략 가능함
▶ open() 연습
file = open('test', 'w', encoding='utf-8')
file.close()
### 실행결과 ###
# 현재 폴더에 test 파일이 생성됨
## 파일 쓰기 : w(write, writelines)
file = open('test.txt', 'wt', encoding='utf8') # 현재 디렉토리에 test.txt 파일 저장
file.write('파일에 저장될 문자\n줄바꿈')
file.close()
### 실행결과 ###
# 현재 폴더에 test.txt 파일이 생성되고, 내용이 저장됨
file = open('./test2.txt', 'wt', encoding='utf8')
file.writelines(['파일에 저장될 문자', '\n', '줄바꿈'])
file.close()
### 실행결과 ###
# 현재 폴더에 test2.txt 파일이 생성되고, 내용이 저장됨
## 파일 쓰기 : a(write, writelines)
file = open('test.txt', 'at', encoding='utf8')
file.write('추가하기\t1')
file.close()
### 실행결과 ###
# 현재 폴더에 test.txt 파일이 생성되고, 추가 내용이 저장됨
file = open('test.txt', 'at', encoding='utf8')
file.write('추가하기\t1')
file.close()
### 실행결과 ###
# 현재 폴더에 test.txt 파일이 생성되고, 내용이 추가 저장됨
file = open('test2.txt', 'at', encoding='utf8')
file.writelines(['추가하기', '\t', '2']) # 라인(줄) 단위 쓰기
file.close()
### 실행결과 ###
# 현재 폴더에 test2.txt 파일이 생성되고, 내용이 추가 저장됨
## 파일 읽기 : r(read, writelines, writelines)
print('======== 읽기 =========')
file = open('test.txt', 'rt', encoding='utf8')
print(file) # <_io.TextIOWrapper name='test.txt' mode='rt' encoding='utf8'>
data = file.read() # 한번에 전체 내용 읽기
print(data)
file.close()
### 실행결과 ###
# ======== 읽기 =========
# <_io.TextIOWrapper name='test.txt' mode='rt' encoding='utf8'>
# 파일에 저장될 문자
# 줄바꿈추가하기 1추가하기 1
## 힌즐씩 읽기
print('\n1.readline -----------')
file = open('test.txt', 'rt', encoding='utf8')
data = file.readline() # 라인(줄) 단위 읽기, 마지막에 개행(\n)문자 있음
print(data, end='')
data = file.readline()
print(data, end='')
file.close()
### 실행결과 ###
# 1.readline -----------
# 파일에 저장될 문자
# 줄바꿈추가하기 1추가하기 1
## 반복문으로
print('\n\n2.반복문으로-------')
file = open('test.txt', 'rt', encoding='utf8')
data = ''
while True:
row = file.readline()
print(row.strip()) # 개행 \n 제거
data += row
if not row:
break
file.close()
print('3.변수 data 값 :')
print(data)
### 실행결과 ###
# 2.반복문으로-------
# 파일에 저장될 문자
# 줄바꿈추가하기 1추가하기 1
# 3.변수 data 값 :
# 파일에 저장될 문자
# 줄바꿈추가하기 1추가하기 1
## readlines() 사용 - 리스트 타입으로 반환
print('\n4.readlines -------')
file = open('test.txt', 'rt', encoding='utf8')
data = file.readlines() # 라인(줄) 단위로 모두 읽음(리스트 타입)
print(data, type(data))
for line in data:
print(line.strip())
file.close()
### 실행결과 ###
# 4.readlines -------
# ['파일에 저장될 문자\n', '줄바꿈추가하기\t1추가하기\t1'] <class 'list'>
# 파일에 저장될 문자
# 줄바꿈추가하기 1추가하기 1
## 자동 close - with Context
print('\n5.with Context 사용 -------')
with open('test.txt', 'rt', encoding='utf8') as f:
data = f.read()
print(data)
### 실행결과 ###
# 5.with Context 사용 -------
# 파일에 저장될 문자
# 줄바꿈추가하기 1추가하기 1
▣ 파일 입출력 관련 연습
## 예제) 04_numbers_data.txt의 내용을 읽고 숫자들의 합 구하기
''' 04_numbers_data.txt
7
9
24
29
34
38
'''
with open('./04_numbers_data1.txt', 'rt', encoding='utf-8') as f:
tot = 0
while True:
line = f.readline()
# print(repr(line))
num = line.strip()
if not line:
break
tot += int(num)
print(tot)
### 실행결과 ###
141
## 예제) 04_numbers_data2.txt의 내용을 읽고 알파벳 t가 포함된 단어만 출력하기
''' 04_numbers_data2.txt
python
java
c++
go
kotlin
react
'''
with open('./04_numbers_data2.txt', 'rt', encoding='utf-8') as f:
chars = f.readlines()
for ch in chars:
if ch.find('t') > 0:
print(ch.strip())
### 실행결과 ###
python
kotlin
react
▣ with open() 사용하여 파일을 읽고, 다시 저장하는 문제
위 파일을 읽어서 남성, 여성별로 추출하여 각각 남성.txt와 여성.txt 파일로 저장(with open() 사용)
(단, 위 파일의 구분자는 탭(\t)으로 되어있는 것을 공백으로 구분하여 저장해야 함)
with open('./데이터.txt', 'r', encoding='utf-8') as f:
mans = []
womans = []
for line in f.readlines():
line_clear = line.strip()
# print(line_clear)
items = line_clear.split('\t')
# print(item)
if items[2] == '남성':
mans.append(' '.join(items))
elif items[2] == '여성':
womans.append(' '.join(items) + '\n')
if mans:
with open('./남성.txt', 'a') as f_man:
for elem in mans:
f_man.write(elem + '\n')
if womans:
with open('./여성.txt', 'w') as f_woman:
# for elem in womans:
f_woman.writelines(womans)
print(mans)
print(womans)
### 실행결과 ###
['bbb 30 남성 경기도 분당구', 'ddd 28 남성 대구시 중구', 'fff 26 남성 광주시 서구', 'hhh 24 남성 경북 포항시', 'jjj 27 남성 충북 청주시']
['aaa 25 여성 서울시 강남구\n', 'ccc 22 여성 인천시 남동구\n', 'eee 35 여성 부산시 해운대구\n', 'ggg 31 여성 대전시 유성구\n', 'iii 29 여성 전남 목포시\n']
# 폴더에 남성.txt, 여성.txt 파일 생성됨
- 텍스트를 readlines()로 읽고 for 문으로 순환하면서 각 라인(줄)의 구분자 탭(\t)을 split() 처리 후
- 남성/여성 구분을 위해 인덱스 2번째를 조건 분기처리하였고,
- 리스트를 공백으로 구분한 문자열로 만들기 위해 join() 함수 사용하여 mans, womans 리스트에 추가함
- 그리고, with open()을 사용하여 남성 리스트는 write()로, 여성 리스트는 writelines()로 저장함
'코딩 연습 > 파이썬 기초(예제)' 카테고리의 다른 글
파이썬 함수, 클래스, 속성 비공개, 상속 등 알아보기 (0) | 2023.12.07 |
---|---|
파이썬 특수문자 제거 정규식 (0) | 2023.12.06 |
파이썬 제어문 종류 - 조건문과 반복문, 연습문제 (0) | 2023.12.04 |
파이썬 연산자, 변수, 자료형 알아보기 (0) | 2023.12.02 |
파이썬 리스트, 튜플, 딕셔너리, 세트 등에 대해 알아보기 (0) | 2023.12.02 |
댓글