Python_5. 입출력

drrobot409·2021년 6월 2일
0

Python

목록 보기
5/10

입출력

표준입출력

  • 표준 입력은 input()으로 가능하다.
  • input()은 사용자에게 값을 직접 입력 받는 역할을 한다.
  • input()으로 입력 받은 값은 문자열로 저장된다.
num = input("숫자를 입력하세요 : ") # 3 입력
print(num) 
# =>3
print(type(num)) 
# => <class 'str'>
  • 표준 출력은 print()로 가능하다.
  • print()에서 다양한 인자를 활용할 수 있다.
# 출력할 내용 사이에 넣기
print("안녕하세요", "반갑습니다.", sep=":D "
# => 안녕하세요:D 반갑습니다.


# 출력할 내용 끝에 넣기
# end 사용시 복수의 print()를 사용하더라도 줄바꿈 없이 한 줄로 출력된다.
print("안녕하세요", end=":D ") 
print("반갑습니다.")
# => 안녕하세요:D 반갑습니다.


# 정렬하기
# ljust()는 괄호 안의 숫자만큼 공간을 확보 후 왼쪽 정렬하는 것을 의미하고
# rjsut()는 괄호 안의 숫자만큼 공간을 확보 후 오른쪽 정렬하는 것을 의미한다.
menu = {"짜장면":5000, "볶음밥":5000, "탕수육":12000}
for food, price in menu.items() :
    print(food.ljust(6), str(price).rjust(6), sep=":")
# 짜장면   :  5000 
# 볶음밥   :  5000
# 탕수육   : 12000
# 메뉴 이름은 좌측부터 정렬되어 있고, 가격은 우측부터 정렬되어 있는 것을 볼 수 있다.


# 0으로 채우기
# .zfill()에서 괄호 안의 숫자만큼 공간을 확보하는데, 빈 공간은 0으로 채워진다.
for num in [3, 23, 513] :
	print(str(num).zfill(3))
# 003
# 023
# 513

다양한 출력 포맷

# 총 13자리 확보, 오른쪽 정렬, 빈 공간은 공백으로 채우기
print("{0: >13}".format("안녕하세요"))
# "{0: >13}"에서 : 뒤에 공백은 빈 공간을 무엇으로 채울지를 의미
# >는 정렬 방향을 의미
# 13은 확보할 공간을 의미
# =>        안녕하세요

# 양수는 + 붙이기
print("{0:+}".format(123))
# => +123

#  13자리 확보, 왼쪽 정렬, 빈칸 *로 채우기
print("{0:*<13}".format(123))
# => 123**********

# 세자리마다 콤마 찍기
print("{0:,}".format(1000000000))
# => 1,000,000,000

# 13자리 확보, 왼쪽 정렬, 세자리마다 콤마, 양수 +, 빈자리 @
print("{0:#<+13,}".format(10000000))
# => +10,000,000@@

# 소수점 반올림
print("{0:.2f}".format(1/6))
# .2f는 소수점 둘째자리까지 출력한다는 것을 의미(소수점 셋째자리에서 반올림)
# => 0.17

파일 입출력

  • 새로운 파일을 생성하거나 pc에 존재하는 파일을 파이썬으로 불러와서 읽기나 쓰기 작업을 할 수 있다.
  • 모든 작업은 파일 열기가 선행되어야 하며, 작업 종료 후에는 파일을 닫아주어야 한다.
  • 한글이 깨지는 현상을 방지하기 위해 인코딩은 utf8로 해주는 것이 권장된다.
# 파일 쓰기 (파일이 이미 존재할 경우 덮어쓰고, 없을 경우 새로 생성한다.)
menu_file = open("menu.txt", "w", encoding="utf8") # 파일 열기, "w"
print("짜장면 가격 5,000원", file=menu_file) # 내용 입력(새로운 내용 입력시마다 자동으로 줄바꿈된다.)
print("짬뽕 가격 6,000원", file=menu_file)
menu_file.close # 파일 닫기


# 파일 이어서 쓰기 (위와 다르게 파일을 덮어쓰지 않고 이어서 작성한다.)
menu_file = open("menu.txt", "a", encoding="utf8") # 파일 열기, "a"
menu_file.write("볶음밥 가격 5,000원\n") # 내용 입력(수동으로 줄을 바꿔주어야 한다.)
menu_file.write("탕수육 가격 12,000원")
menu_file.close() # 파일 닫기


# 전체 파일 읽기
menu_file = open("menu.txt", "r", encoding="utf8") # 파일 열기, "r"
print(menu_file.read())
menu_file.close


# 파일 한 줄씩 불러와서 읽기
# print(menu_file.readline())를 한 번 실행할 때 마다 다음 줄을 출력한다.
menu_file = open("menu.txt", "r", encoding="utf8")
print(menu_file.readline())
print(menu_file.readline())
print(menu_file.readline())
print(menu_file.readline())
menu_file.close()


# 한 줄씩 모두 불러와서 읽기
# 반복문을 통해 한 줄씩 불러오며, 더이상 줄이 없을 경우 break한다.
menu_file = open("menu.txt", "r", encoding="utf8")
while True:
    line = menu_file.readline()
    if not line :
        break
    print(line)
menu_file.close()


# 리스트에 저장 후 불러오기.
menu_file = open("menu.txt", "r", encoding="utf8")
lines = menu_file.readlines() # 리스트로 저장된다.
for line in lines :
    print(line)
menu_file.close()

pickle

  • pickle 라이브러리는 프로그램 상에서 사용 중인 데이터를 파일 형태로 저장, 나중에 데이터를 그대로 불러올 수 있게 해준다.
# 라이브러리 불러오기
import pickle


# 피클 파일 생성
#w는 쓰기, b는 바이너리를 의미, 피클은 항상 바이너리 타입을 정의해야 한다.
menu_file = open("menu.pickle", "wb")
# 저장할 데이터 생성
menu = {"짜장면":5000, "짬뽕":6000, "탕수육":{"소":12000, "중":16000, "대":20000}}
# 데이터를 피클 파일에 저장
# menu(사전)를 menu_file(피클)에 저장한다.
pickle.dump(menu, menu_file)
# 피클 닫기
menu_file.close()


# 피클 파일에서 데이터 불러오기
# 피클 파일 열기
menu_file = open("menu.pickle", "rb")
# 피클에 저장된 데이터를 불러와서 menu에 저장
menu = pickle.load(menu_file)
# 피클 닫기
menu_file.close()

with

  • with를 사용하면 파일 입출력을 더 간단하게 수행할 수 있다.
  • 파일을 열고나면 항상 마지막에 닫아주는 작업을 수행했는데, with를 통해 파일을 열면 with문 탈출시에 자동으로 파일이 닫히게 된다.
# 단 두 줄 만으로 이전에 만든 피클파일을 불러오고 닫을 수 있다.
with open("menu.pickle", "rb") as menu_file :
	print(pickle.load(menu_file))
    
# txt도 마찬가지.
with open("menu.txt", "r", encoding="utf8" as menu_file :
	print(menu_file.read())

연습 문제

  • 매 주 1회 작성해야하는 아래 양식의 보고서 파일을 50주차까지 생성하기
  • 파일 이름은 'n주차.txt'로 통일
    ('1주차.txt', '2주차.txt' ...)

    - n 주차 주간보고 -
    부서 :
    이름 :
    업무 요약 :

for report in range(1, 3) :
    with open(f"{report}주차.txt", "w", encoding="utf8") as report_file :
        report_file.write(f"- {report} 주차 주간보고 - \n")
        report_file.write("부서 :\n")
        report_file.write("이름 :\n")
        report_file.write("업무 요약 :")
profile
개발자로 자기 개발 중

0개의 댓글