[Python] 나도코딩 기본편 - (5)

Updated:

유튜브 나도코딩 무료 강의를 통해 학습한 내용을 정리해서 올리고 있습니다.

실습과정에서 필요에 따라 일부 강의 내용의 누락 및 추가, 수정사항이 있습니다.

퀴즈의 경우, 유튜브 풀이와 상이할 수 있습니다.


표준 입출력

print("파이썬", "자바", sep = ",", end = "?")
print("무엇이 더 재미있을까요?")

import sys
print("파이썬", "자바", file=sys.stdout) # 표준 출력
print("파이썬", "자바", file=sys.stderr) # 표준 에러
파이썬,자바?무엇이 더 재미있을까요?
파이썬 자바


파이썬 자바
  • 표준 에러 출력에 대해 사실 잘 이해가 안되는데 아마 함수를 정의할 때 warning 메시지 등으로 사용하지 않을까 싶다.

출력형식 변경

scores = {"수학":0, "영어":50, "코딩":100}

# 기본 출력
for subject, score in scores.items():
    print(subject, score)

# zfill, ljust, rjust / 모두 str에서 사용
for subject, score in scores.items():
    print(subject.ljust(2), str(score).rjust(4), sep = ":")

# 은행 대기순번표 001 002 003
for num in range(1,3):
    print("대기번호: " + str(num).zfill(3))
수학 0
영어 50
코딩 100
수학:   0
영어:  50
코딩: 100
대기번호: 001
대기번호: 002

input type

answer = input("아무 값이나 입력하세요 : ")
print(type(answer))
print("입력하신 값은 " + answer + "입니다.")
아무 값이나 입력하세요 : 1
<class 'str'>
입력하신 값은 1입니다.
  • input()에 입력한 값은 항상 srt형이다.

숫자 출력 형식

# 빈 자리는 빈공간, 오른쪽 정렬, 총 10자리 공간 확보
# {변수:빈칸채우기/정렬/부호/공간/콤마, 소수등}
print("{0: >10}".format(500))

# 양수 + 음수 - 표시
print("{0: >+10}".format(-500))

# 왼쪽 정렬, 빈칸 _
print("{0:_<+10}".format(500))

# 3자리마다 콤파
print("{0:+,}".format(100000000000000))

# 3자리마다 콤마, 부호, 자릿수 확보, 빈 자리는 ^
print("{0:^<+30,}".format(100000000000000))

# 소수점
print("{0:.2f}".format(5/3))
       500
      -500
+500______
+100,000,000,000,000
+100,000,000,000,000^^^^^^^^^^
1.67

파일 입력

# 데이터 쓰기: w
score_file = open("score.txt", "w", encoding = "utf8")
print("수학: 0", file=score_file)
print("영어: 50", file=score_file)
score_file.close()
# 데이터 추가: a
score_file = open("score.txt", "a", encoding = "utf8")
score_file.write("과학: 80")
score_file.write("\n코딩: 100")
score_file.close()
  • print()는 자동 줄바꿈으로 입력되었는데 write()는 아니어서 직접 줄바꿈 해야한다.

파일 출력(불러오기)

# 전체 데이터 불러오기: r
score_file = open("score.txt", "r", encoding = "utf8")
print(score_file.read())
score_file.close()
수학: 0
영어: 50
과학: 80
코딩: 100
# 한 줄 불러오기
score_file = open("score.txt", "r", encoding = "utf8")
print(score_file.readline()) # 줄 별로 읽기, 한 줄 읽고 커서는 다음줄로 이동
score_file.close()
수학: 0
# 전체 데이터 불러오기 한 줄씩
score_file = open("score.txt", "r", encoding = "utf8")
while True:
    line = score_file.readline()
    if not line:
        break
    print(line, end = "")
score_file.close()
수학: 0
영어: 50
과학: 80
코딩: 100
# 파일 읽기 (전체) for문 이용
score_file = open("score.txt", "r", encoding = "utf8")
lines = score_file.readlines()
for line in lines:
    print(line, end="")
score_file.close()
수학: 0
영어: 50
과학: 80
코딩: 100
  • readlines()는 list 형태로 한 줄씩 저장한다.

pickle 파일

import pickle

profile = {"이름":"박명수", "나이":30, "취미":["축구","골프","코딩"]}
print(profile)

# 쓰기: wb
profile_file = open("profile.pickle", "wb")
pickle.dump(profile, profile_file) # profile 정보를 profile_file에 저장
profile_file.close()

# 읽기
profile_file = open("profile.pickle", "rb")
profile = pickle.load(profile_file) # 파일에 있는 정보를 profile 에 불러오기
print(profile)
profile_file.close()
{'이름': '박명수', '나이': 30, '취미': ['축구', '골프', '코딩']}
{'이름': '박명수', '나이': 30, '취미': ['축구', '골프', '코딩']}
  • pickle은 binary형태 파일로 일반 파일보다 속도면에서 장점이 있다고 하며 encoding을 입력하지 않는다.

  • pickle.dump(오브젝트, 저장 할 파일명): 파이썬 내 오브젝트를 저장(내보내기)한다.

  • pickle.load(불러 올 파일명): pickle 파일을 파이썬 내로 불러온다.

with 파일 입출력

with open("profile.pickle", "rb") as profile_file2:
    print(pickle.load(profile_file2))

with open("study.txt", "w", encoding="utf8") as study_file:
    study_file.write("파이썬 공부중")

with open("study.txt", "r", encoding="utf8") as study_file:
    print(study_file.read())
{'이름': '박명수', '나이': 30, '취미': ['축구', '골프', '코딩']}
파이썬 공부중
  • with() 함수를 사용하면 close를 쓰지 않아도 된다.

Quiz 7

당신의 회사는 매주 1회 작성해야 하는 보고서가 있습니다.

보고서는 항상 아래와 같은 형태로 출력되어야 합니다.

– X 주차 주간보고 –

부서 :

이름 :

업무 요약:

1주차부터 50주차까지의 보고서 파일을 만드는 프로그램을 작성하시오.

조건: 파일명은 1주차.txt, .. 와 같이 만듭니다.

# 파일 생성
for week in range(1,51):
    with open(f"{week}주차.txt", "w", encoding="utf8") as data:
        data.write(f"-- {week} 주차 주간보고 --")
        data.write("\n부서 :")
        data.write("\n이름 :")
        data.write("\n업무 요약 :")
        
# 파일 확인
for week in range(1,6):
    with open(f"{week}주차.txt", "r", encoding="utf8") as data:
        print(data.read())
-- 1 주차 주간보고 --
부서 :
이름 :
업무 요약 :
-- 2 주차 주간보고 --
부서 :
이름 :
업무 요약 :
-- 3 주차 주간보고 --
부서 :
이름 :
업무 요약 :
-- 4 주차 주간보고 --
부서 :
이름 :
업무 요약 :
-- 5 주차 주간보고 --
부서 :
이름 :
업무 요약 :

Leave a comment