본문 바로가기

Programming/Python

[Python] 파이썬 기초 공부 08 (feat. 나도코딩):: 입출력, 피클(pickle), 위드(with)

728x90

본격적인 파이썬을 활용하기 위해서는 데이터를 입력해서 저장하고,

저장된 데이터를 불러오는 출력 기능이 꼭 필요한데요

오늘은 입출력을 어떻게 할 수 있는지 배웠습니다.

나도코딩님 6시간 강의를 끊어 듣고 있는데,

앞으로 한 3 섹션정도 남았네요~ 이번주도 계속 정주행 해 보겠습니다.

 

 

1. 표준 입출력

1) 기본 출력 형태 응용

print(): 안의 내용을 출력

콤마(,): print 안에 내용을 연속 출력 하되 중간에 띄어쓰기

print("Python","Java") #Python Java

더하기(+): print 안에 내용을 연속 출력 하되 중간에 띄어쓰기 없음

print("Python"+"Java") #PythonJava

sep=””: print 안에 내용을 연속 출력 하되 따옴표(“”) 안에 추가 하고 싶은 내용을 추가할 있음

print("Python","Java", sep=",")  #Python,Java
print("Python","Java", "JavaScript", sep=" vs ") #Python vs Java vs JavaScript

end=””: print 안에 내용 출력 문장의 끝 부분을  따옴표(“”)안의 내용으로 바꿀 있음

print("Python","Java", end="?")  #Python Java?

** print 문을 연속해서 두 개의 문장으로 쓸 경우,  end를 이용하여 두 문장을 한 문장으로 출력 할 수 있음

print("Python","Java", end=" ")
print("무엇이 더 재밌을까요?")
#Python Java 무엇이 더 재밌을까요?

ㅁ  sep과 end의 응용

print("Python","Java", sep=", ", end="? ")
print("무엇이 더 재밌을까요?") 
#Python, Java? 무엇이 더 재밌을까요?

 

2) 표준출력

a 표준출력(stdout), 표준에러(stderr) 확인

. 로그 처리 표준출력은 정상이고 표준에러는 코드 수정이 필요한

. sys 모듈을 이용

import sys
print("Python","Java", file=sys.stdout)
print("Python","Java", file=sys.stderr)

 

b 출력포맷

정렬: 오른쪽 정렬::  .rjust()  / 왼쪽 정렬:  .ljust()

   () 에는 공간 확보를 하고 싶은 숫자를 입력한다

   , 변수.ljust(8)라고 하면 8칸을 만들고 거기에서 왼쪽 정렬을 한다

   만약의 내용이 수학이라고 하면 수학ㅁㅁㅁㅁㅁㅁ 된다 (ㅁ는 칸을 의미)

scores={"수학":0, "영어":50, "코딩":100}
for subject, score in scores.items():
    print(subject.ljust(8), str(score).rjust(4), sep=":") 
'''
수학      :   0
영어      :  50
코딩      : 100
'''

 

.zfill(): ()안의 숫자 만큼 칸을 확보하고, 내용이 없는 칸에는 0 넣는다

for num in range(1,21):
    print("대기번호: " + str(num))
'''
대기번호: 1
대기번호: 2
'''
for num in range(1,21):
    print("대기번호: " + str(num).zfill(3)) #3개만큼의 크기를 확보하고 0을 집어 넣는데 값이 없을 때만 넣는다
'''
대기번호: 001
대기번호: 002
'''

 

3) 표준입력:: input

. input으로 감싸면 화면에 입력 창이 뜬다

. input으로 값을 받을 경우 항상 문자열 형태로 저장된다

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

 

2. 다양한 출력포맷:”{0:포맷형태}”.format()

예제 1: "{0: >10}".format(500)

빈공간 = 빈자리

>: 오른쪽 정렬

10: 10자리 공간 확보

print("{0: >10}".format(500))  #       500

예제2: "{0: >+10}".format(500)

+: format안의 값이 양수일 때는 + 표시, 음수일 표시

print("{0: >+10}".format(500))  #      +500
print("{0: >+10}".format(-500)) #      -500

 예제3: "{0:_<+10}".format(500)

_: 빈칸에 _ 채움

<: 왼쪽 정렬

print("{0:_<+10}".format(500))  #+500______

예제4: "{0:,}".format(10000000000000000)

,(콤마): 3자리마다 콤마를 찍어

print("{0:,}".format(10000000000000000)) #10,000,000,000,000,000

예제5: "{0:+,}".format(10000000000000000)

+: +&- 표시

,(콤마): 3자리마다 콤마 찍기

print("{0:+,}".format(10000000000000000)) #+10,000,000,000,000,000
print("{0:+,}".format(-10000000000000000)) #-10,000,000,000,000,000

예제6: "{0:^<+30,}".format(10000000000000000)

^: 빈칸에 ^채우기

<: 왼쪽정렬

+: 양수/음수 표시

30: 30

,(콤마): 3자리마다 콤마 찍기

print("{0:^<+30,}".format(10000000000000000)) #+10,000,000,000,000,000^^^^^^^

예제7: "{0:f}".format(5/3)

f: 소수점 출력

print("{0:f}".format(5/3)) #1.666667

예제8: "{0:.2f}".format(5/3)

.2f: 소수점 2째짜리까지 표시 하되, 3 자리에서 반올림

print("{0:.2f}".format(5/3)) #1.67

 

3. 파일입출력

파일 열기: open(“파일명”, “명령어”, encoding=”utf8”)

. 명령어: w(덮어쓰기) & a(이어쓰기) & r(읽기)

. utf8: 한글을 제대로 읽기 위함

파일 닫기: 파일명_file.close()

 

1) 파일 내용 쓰기

score_file=open("score.txt", "w", encoding="utf8") #w: 쓰기용도: 덮어쓰기
print("수학: 0", file=score_file)
print("영어: 50", file=score_file)
score_file.close()

score.txt 라는 파일이 생성되고, 안에 내용이 입력되어 있다.

수학: 0

영어: 50

score_file=open("score.txt", "a", encoding="utf8") #a: 이어쓰기
print("수학: 0", file=score_file)
print("영어: 50", file=score_file)
score_file.close()

score.txt 라는 파일에 내용이 추가 되어 있다.

수학: 0

영어: 50

수학: 0

영어: 50

 

2) 파일 내용 읽기

read(): 모든 내용 읽기

readline(): 읽고, 커서는 다음 줄로 이동

예제1:

score_file = open("score.txt", "r", encoding="utf8")
print(score_file.read())
score_file.close()
'''
수학: 0
영어: 50
수학: 0
영어: 50
'''

예제2:

score_file = open("score.txt", "r", encoding="utf8")
print(score_file.readline())
print(score_file.readline())
print(score_file.readline())
print(score_file.readline())
score_file.close()
'''
수학: 0

영어: 50

수학: 0

영어: 50
'''

예제3: 줄인지 모를 – while 이용

score_file = open("score.txt", "r", encoding="utf8")
while True: #무한루프로 계속 반복
    line = score_file.readline()
    if not line: #line이 없으면, 즉 읽어 올 내용이 없으면
        break #반복문 탈출
    print(line)
score_file.close()
'''
수학: 0

영어: 50

수학: 0

영어: 50
'''

예제4: 줄인지 모를 – list 만들어서 처리

score_file = open("score.txt", "r", encoding="utf8")
lines = score_file.readlines()
for line in lines:
    print(line, end="")

score_file.close()
'''
수학: 0
영어: 50
수학: 0
영어: 50
'''

 

4. pickle: 프로그램 상에서 사용하는 데이터를 파일 형태로 저장해 주는

pickle 사용 때는 바이너리(binary) 항상 정의해 줘야한다

바이너리(binary)?

2진수로 표시되는 데이터를 말하며, 일반적으로 프로그램을 컴파일하여 생성되는 목적 프로그램파일, 통신망을 통하여 데이터를 전송하기 위하여 사용하는 전송 데이터 파일에서 널리 사용된다.

1) pickle 저장하기: pickle.dump(변수, 변수_file)

import pickle
profile_file = open("profile.pickle", "wb")
#b: 바이너리를 의미하는데 피클에서는 항상 정의 해 줘야함
#encoding은 따로 정의 해 줄 필요 없음
profile = {"이름":"박명수", "나이":30, "취미":["축구", "골프", "코딩"]}
#사전 형태로 만들고 그 안에 취미는 리스트 형태로 만든다
print(profile)
pickle.dump(profile, profile_file) 
#profile에 있는 정보를 file에 저장
profile_file.close()
#{'이름': '박명수', '나이': 30, '취미': ['축구', '골프', '코딩']}

2) pickle 불러오기: pickle.load(변수_file)

import pickle
profile_file = open("profile.pickle", "rb")
profile = pickle.load(profile_file)
#file에 있는 정보를 profile에 불러오기
print(profile)
profile_file.close()
#{'이름': '박명수', '나이': 30, '취미': ['축구', '골프', '코딩']}

 

5. with: pickle 사용하지 않고 데이터를 저장하고 불러올 있음

1) with 활용해서 pickle 파일을 불러 있음

import pickle

with open("profile.pickle", "rb") as profile_file: 
#profile을 열어서 profile_file 변수에 저장
    print(pickle.load(profile_file))

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

2) 데이터 저장

with open(“파일명”, “w”, encoding=”utf8”) as 변수:

   변수.write(“내용”)

with open("study.txt", "w", encoding="utf8") as study_file:
    study_file.write("파이썬을 열심히 공부하고 있어요")

3) 데이터 불러오기

with open("study.txt", "r", encoding="utf8") as study_file:
    print(study_file.read())
#파이썬을 열심히 공부하고 있어요

 

6. Quiz

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

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

- X 주차 주간 보고

부서 :

이름 :

업무 요약 :

 

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

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

 

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업무 요약  :")

 

오늘까지해서 파일을 생성하고, 불러올 수 있게 되었습니다.

뒤로 갈 수록 앞의 내용들을 까먹어서 다시 보고 오느라고 시간이 걸리네요

이렇게 함수와 모듈에 관한 지식이 누적되면 곧 데이터 분석까지 할 수 있을 것 같습니다.

 

나도코딩 강의 함께 정주행해요~

728x90