상세 컨텐츠

본문 제목

[Python 파이썬 독학 6일차]

파이썬 스터디/파이썬-Python 기본편

by 후즈테크 2020. 9. 25. 22:56

본문

반응형

 

 

1. 표준 입출력

 

 - sep : 각 값의 사이 연산자 설정 가능, 기본 값은 띄어쓰기, 

 - end : print 종료 후 출력되는 연산자, 기본 값은 줄바꿈(Enter)

코   딩 결과 값
print("Python","Java") Python Java
print("Python","Java",sep = ',') Python,Java
print("Python","Java",sep = ' vs ') Python vs Java
print("Python","Java","JavaScript", sep = ' vs ') Python vs Java vs JavaScript
print("Python","Java",sep = ',', end = "?"
print("무엇이 더 재밌을까요?")
Python,Java?무엇이 더 재밌을까요?
# 기본 end 는 줄바꿈을 실행

 

# log 구분 생성 

 : 정상적인 log 와 error log를 구분하여 생성하여 Log 관리를 더욱 원활히 할 수 있다.

import sys
print("Python","Java",file = sys.stdout) # 정상 처리된 사항에 대한 Log
print("Python","Java",file = sys.stderr) # Error 관련 Log

 

# for 반복문으로 출력할 경우 정렬 방법

# 정렬 없이 일반적인 출력

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

for subject, score in scores.items(): # items() : Key 와 Value를 나타냄

  print(subject, score)

결과 값 : 

수학 0
영어 50
코딩 100

 

# ljust(왼쪽 정렬), rjust (오른쪽정렬) 및 자릿수 확보

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

for subject, score in scores.items(): # items() : Key 와 Value를 나타냄

  print(subject.ljust(8), str(score).rjust(4) , sep = ":") # sep로 출력물이 더욱 깔끔하게 정리가능

 

결과 값 : 

수학      :   0

영어      :  50

코딩      : 100

반응형

 

 

 

# 은행 대기 순번표 처럼 순서대로 출력( 001, 002, 003 ~ 020)

 

for num in range(1,21):

  print("대기번호 : " + str(num))

결과 값 : 

대기번호 : 1
대기번호 : 2
대기번호 : 3
.... (생략)
대기번호 : 20

 

# zfill : 원하는 자릿수 만큼 표시하고 빈칸을 0으로 채움

for num in range(1,21):

  print("대기번호 : " + str(num).zfill(3)) # 3자리를 확보하고, 빈칸을 0으로 채움

결과 값 :

대기번호 : 001 
대기번호 : 002 
대기번호 : 003 
.... (생략)
대기번호 : 020

 

# input 으로 변수를 받을 경우, 모든 DATA는 str 형식으로 처리된다.

# Case 1. 

answer = input("아무 값이나 입력하세요 : ")
print("입력하신 값은 " + answer + "입니다.")

print(type(answer)) # 10 입력 시, 결과 값 : <class 'str'>
print(type(answer)) # 문자 입력 시, 결과 값 : <class 'str'>

#Case 2.

answer = 10

print("입력하신 값은 {0} 입니다.". format(answer))
print(type(answer)) # 10 입력 시, 결과 값 : <class 'int'>

# 사용자 입력을 통해(input) 받게되면 해당 값은 str 로 입력 받음

 

 

 

2. 다양한 출력 포맷

 

# 빈 자리는 빈공간으로 두고, 오른쪽 정렬을 하되, 10자리 공간을 확보
print("{0: >10}".format(500)) 500
print("{0: >10}".format(-500)) -500
# 양수일 때는 +로 표시, 음수일 때는 -로 표시
print("{0: >+10}".format(500)) +500
print("{0: >+10}".format(-500)) -500
print("{0: >-10}".format(500)) 500
print("{0: >-10}".format(-500)) -500
#왼쪽 정렬을 하고, 빈칸으로 _ 로 채움
print("{0:_<10}".format(500)) 500_______
#3자리 마다 콤마를 찍어주기
print("{0:,}".format(10000000)) 10,000,000
#3자리 마다 콤마를 찍어주기, +-부호도 붙이기
print("{0:+,}".format(10000000)) +10,000,000
print("{0:+,}".format(-10000000)) -10,000,000
# 3자리 마다 콤마를 찍어주기, 부호도 붙이고, 자릿수도 확보하기
# 빈자리는 ^로 채워주세요
print("{0:^<+30,}".format(10000000)) +10,000,000^^^^^^^^^^^^^^^^^^^
# 소수점 출력
print("{0:f}".format(5/3)) 1.666667
# 자릿수 소수점 아래2자리 까지
print("{0:.2f}".format(5/3)) 1.67

# 강의 중 의문 사항이 들어, 부호에 - 표시를 해봤으나, 생략되었을 때와 결과가 같았다.

print("{0: >-10}".format(500)) 의 결과 값 : 500 / print("{0: >10}".format(500)) 의 결과 값 : 500

print("{0: >-10}".format(-500)) 의 결과 값 : -500 / print("{0: >10}".format(-500)) 의 결과 값 : -500 

 

 

3. 파일 입출력

 # 입력 방법 1. (print)

  - oepn 으로 파일을 열고 난 후 작업 완료시에는 close() 까지 완료 할 것.

  - w : write (overwrite)

  - print 문으로 내용 생성

score_file = open("score.txt","w",encoding="utf8") 
# open("file name", "w : 쓰기(덮어쓰기)", "endcoding ="utf8" - 한글 정상적으로 인식)

print("수학 : 0", file = score_file)
print("영어 : 50", file = score_file)

score_file.close()

open 으로 score.txt 파일 열고 난뒤, print 로 출력문 생성. close

# 입력 방법 2. ( .write)

  - oepn 으로 파일을 열고 난 후 작업 완료시에는 close() 까지 완료 할 것.

  - 변수명.write 로 해당 내용 입력, print와 달리 줄바꿈이 없으므로 탈출문자(\n) 이용하여 줄바꿈

  - a : append(내용 추가) , 기존에 score 파일이 없을 때, a 로 설정하면 신규 파일 생성하며 내용 작성.

score_file = open("score.txt","a",encoding="utf8")  # a - append 추가

score_file.write("과학 : 80") # write 구문으로도 입력 가능
score_file.write("\n코딩 : 100") # print 와 달리 줄바뀜이 생기지 않으므로 탈출문자로 구분

score_file.close()

 

# 출력 방법 1( .read) : 전체를 한번에 불러오기

  - r : read

  - source_file.read() : source_file 로 명시된 파일 전체를 읽음. read 뒤 괄호 표시() 꼭 할 것.

score_file = open("score.txt","r",encoding="utf8")  # r - read
print(score_file.read()) # 전체를 읽어 오는 코딩
score_file.close()

 

# 출력 방법 2-1. ( .readline() 한 줄 씩 출력, while 문 이용하여 전체 출력)

  - readline() 을 사용할 경우, 해당 파일의 한 줄씩 읽은 후, 다음 줄(Enter)로 이동. print와 혼합 사용 시, 2줄을 이동하게 됨. 1줄로 변경하고 싶을 경우, end ="" 으로 설정. ex) print(score_file.readline(), end="")

  - 전체 파일이 몇 줄로 구성되어 있는지 모를 경우에는 사용이 제한되어 전체를 읽을 경우, while 문과 혼합하여 사용

score_file = open("score.txt","r",encoding="utf8")  # r - read

print(score_file.readline()) # 1줄씩 읽기, 읽은 후, 다음 줄(Enter)로 이동
print(score_file.readline()) # print 와 readline으로 인한 2줄 이동을 1줄 이동으로
print(score_file.readline()) # 변경하고 싶을 경우, end = "" 으로 적용
print(score_file.readline()) # print(score_file.readline(), end="")

score_file.close()

 

 

# 출력 방법 2-2 ( readline, while, break 사용)

  - 1 줄씩 읽되, while 문을 이용하여 마지막까지 읽고, break를 이용하여 구문 종료함.

  - 결과 값의 2줄을 제외하고 싶을 경우, print(line, end="") 으로 1줄로 변경 가능.

  - 추가로 알게된 기능으로 if 와 else 의 경우, 들여쓰기(노란색 줄)이 맞을 경우, else 를 생략하여도 else로 동작하는 것을 확인함.

score_file = open("score.txt","r",encoding="utf8")  # r - read

while True :
  line = score_file.readline()
  if not line :
    break
  print(line) # 줄을 if 와 맞춰 쓸 경우, else를 쓰지 않아도 else 구문으로 인식
  
score_file.close()

 

# 출력 방법 3. ( .readlines 와 for 문을 이용하는 방법)

  - .readines() 를 이용하여 list 형태로 저장 후, for 반복문 사용

score_file = open("score.txt","r",encoding="utf8")  # r - read

lines = score_file.readlines() # list 형태로 저장
for line in lines :
  print(line, end="")
  
score_file.close()

 

 

4. pickle 

  : 프로그램에서 사용중인 데이터를 파일 형태로 저장. 저장된 파일을 다른 사용자(또는 개발자)에게 전달 가능

 # 4-1 pickle 저장(출력) / dump

  - import pickle 후, 생성될 file 명을 open 으로 생성 (profile.pickle)

  - wb : write , binary ( pickle 사용시에는 binary 를 사용해야 함)

  - pickle.dump 를 이용하여, profile_file 에 있는 값 들을 profile.pickle에 저장

  - pickle 사용 시에도 open 이후, close 까지 진행하여야함. 생략 불가.

import pickle

profile_file = open("profile.pickle", "wb") # b : binary

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

print(profile)

pickle.dump(profile,profile_file) # profile에 있는 정보를 file에 저장

profile_file.close()

 

 # 4-2 pickle 읽기(입력) / load

  - import pickle 후, 생성될 file 명을 open 으로 생성 (profile.pickle)

  - rb : read , binary ( pickle 사용시에는 binary 를 사용해야 함)

  - pickle 사용 시에도 open 이후, close 까지 진행하여야함. 생략 불가.

import pickle

profile_file = open("profile.pickle", "rb") # b : binary

profile = pickle.load(profile_file) # 파일에 있는 정보를 profile에 불러오기

print(profile)

profile_file.close()

 

 

5. with

  : 파일을 열고 닫는 기능을 하며, 좀 더 편함(close 를 진행하지 않아도 됨)

  - 코딩이 좀 더 줄어들고, open 후, close라는 불편함이 줄어듬

import pickle

with open("profile.pickle","rb") as profile_file:
  print(pickle.load(profile_file)) # with 문은 close를 사용하지 않아도 됨
  
  # 결과 값 : {'이름': '박명수', '나이': 30, '취미': ['축구', '골프', '코딩']}
  # 위 코딩의 profile.pickle 파일을 생성하였을 경우 출력(4-1 참조)

 

 

# 위의 3번 과 4번의 입력에서와 같이 oepn -> 내용 입, 출력 -> close 등의 과정이 단순화 됨

# with 입력 예

with open("study.txt","w", encoding="utf8") as study_file:
  study_file.write("파이썬을 열심히 공부하고 있어요") # 2줄로 파일 생성 가능

# with 출력 예

with open("study.txt","r", encoding="utf8") as study_file:
  print(study_file.read())

 

 

------------------------------------------------------------------------------

Quiz 7.

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

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

 

- X 주차 주간보고 -

부서 :

이름 :

업무 요약:

 

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

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

 

------------------------------------------------------------------------------

 

Ans 1. 내가 작성한 코딩. 문제를 잘 못 읽고 1년(52주)를 작성함...ㅡㅡ;; 

         해당 사항 외에는 변수 값 외 나도코딩님과 차이 없음.

for week in range(1,53):
    with open("{0}주차.txt".format(week),"a", encoding="utf8") as work_file:
        work_file.write("- {0} 주차 주간보고 -\n" .format(week)) 
        work_file.write(" 부서 : \n") 
        work_file.write(" 이름 : \n") 
        work_file.write(" 업무 요약 : \n") 

 

# 참고 처음 실패한 코딩(.format 위치를 가장 뒤에 썼을 때, oepn 에서 적용되지 않고, write 부분에서만 적용됨.

  - 1개의 파일 {0}주차.txt 에 1~52주차 주간보고 내용이 작성됨. 문제를 잘 못 읽고 1년(52주)를 작성함...ㅡㅡ;;

for week in range(1,53):
    with open("{0}주차.txt","a", encoding="utf8".format(week)) as work_file: # 문제의 부분
        work_file.write("- {0} 주차 주간보고 -\n" .format(week)) 
        work_file.write(" 부서 : \n") 
        work_file.write(" 이름 : \n") 
        work_file.write(" 업무 요약 : \n") 

 

 

Ans 2. '나도코딩' 님 답안

for i in range(1,51):
    with open(str(i) +"주차.txt", "w", encoding="utf8") as report_file:
        report_file.write("- {0} 주차 주간보고 -" .format(i)) 
        report_file.write("\n부서 : ") 
        report_file.write("\n이름 : ") 
        report_file.write("\n업무 요약 : ") 

 

FeedBack

이번에는 나도코딩과 거의 유사하게 작성함. 가장 간편한 형태로 작성하여 비슷한 작성이 진행되었던 것 같고,

당연한 내용이지만, for 대신 while 문, with 대신 print 나 .write 등을 조합하여도 작성가능할 것 같다.

 


유튜버 '나도코딩' 님의 영상을 보며 공부 및 노트 작성합니다.


함께 공부해 나가실 분은

www.youtube.com/watch?v=kWiCuklohdY&feature=youtu.be

반응형

관련글 더보기

댓글 영역