표준입출력.py

몽자비루 ㅣ 2023. 3. 14. 22:14

## 표준입출력
# sep = , 에 뭐가들어갈지 정할 수 있음.
# end = print문 끝에 원하는 텍스트를 넣을 수 있음.
print("Python","Java", "C#",sep = " vs ", end = "?")
print("무엇이 더 재밌을까요?")

import sys
# 표준출력으로 문장이 출력된다.
print("Python","Java", "C#",file = sys.stdout)
# 표준에러로 문장이 출력된다. 사용 에러가 난 부분을 쉽게 찾을 수 있음.
print("Python","Java", "C#",file = sys.stderr)

scores = {"수학":50, "영어":100, "코딩":80}
# for문에 dictionary사용 시, 아이템을 2개씩 받아야 한다.
for subject, score in scores.items():
    # ljust(n) = n개의 공간 확보 후 좌측정렬
    # rjust(n) = n개의 공간 확보 후 우측정렬
    print(subject.ljust(5), str(score).rjust(4), sep= ":")

for num in range(1,21,3):
    # zfill(n) = n개의 공간 중 빈칸을 `0`으로 채움
    print("대기번호 :",str(num).zfill(3))

# # input값은 무조건 string 타입으로 들어감
answer = input("아무 값이나 입력하세요 : ")
print("입력 값은 {}입니다.".format(answer))
  • sep과 end 옵션을 사용하여 출력을 커스터마이징할 수 있다.
  • sys.stdout와 sys.stderr를 사용하여 출력을 구분할 수 있다.
  • ljust()와 rjust() 를 사용하여 출력되는 문자열을 정렬할 수 있다.
    ㄴ 괄호 안에 숫자가 있으면, 숫자 칸만큼 공간을 확보한다.
  • zfill(n) 를 사용하여 비어있는 문자열을 0으로 채울 수 있다.
  • input으로 들어가는 값은 무조건 string값으로 들어감.
## 다양한 출력포맷
# 빈 자리는 빈 공간으로 두고, 오른쪽 정렬을 하되, 총 10자리 공간을 확보
print("{0: >10}".format(500))
# 양수일땐 +, 음수일땐 -로 표시
print("{0: >+10}".format(500))
print("{0: >+10}".format(-500))

# 왼쪽 정렬 후 빈칸을 _로 채움
print("{0:_<10}".format(500))

# 3자리마다 콤마 찍어주기
print("{0:,}".format(100000000000))
# 3자리마다 콤마, +-부호
print("{0:+,}".format(100000000000))
# 3자리마다 콤마, +-부호, 자릿수 확보(30), 빈자리는 _
print("{0:_<+30,}".format(100000000000))

# 소수점 출력
print("{0:f}".format(5/3))
# 소수점 n째 자리까지 표시 (n+1자리에서 반올림)
print("{0:.2f}".format(5/3))
  • 출력포맷을 사용하면 음수/양수는 물론, 공간확보 등이 가능.
  • 특히 소수점 반올림, 3자리마다 콤마, 특정문자로 빈자리 채우기가 가능.
## 파일입출력
# 파일을 쓰기용으로 열음
score_file = open("score.txt","w", encoding="utf8")
print("수학 : 0",file=score_file)
print("영어 : 50",file=score_file)
print("코딩 : 100",file=score_file)
# 파일을 열었을 때 반드시 닫아줘야 함.
score_file.close()

# append, 즉 덮어쓰기용으로 파일을 열음
score_file = open("score.txt","a", encoding="utf8")
# 변수명.write로 텍스트 입력 시, 줄바꿈되지 않음.
score_file.write("과학 : 80\\n")
score_file.write("코딩 : 100")
# 파일을 열었을 때 반드시 닫아줘야 함.
score_file.close()

# read, 즉 읽기용으로 파일을 열음.
score_file = open("score.txt","r", encoding="utf8")
# 현재 커서가 있는 한줄을 읽고 출력함.
# 다만 readline, print 모두 줄바꿈이 있어서 줄바꿈이 2회됨.
print("score_file.readline()")
print(score_file.readline())
# 파일의 모든 내용을 읽고 출력함.
print("score_file.read()")
print(score_file.read())
score_file.close()

# 파일이 몇줄인지 모를 때 처리방법
# 무한반복 사용.
score_file = open("score.txt","r", encoding="utf8")
index = 0
while(True):
    line = score_file.readline()
    if not line:
        break
    index +=1
    print("{} : {}".format(index, line), end = "")
score_file.close()

print()
# list 사용
score_file = open("score.txt","r", encoding="utf8")
index = 0
# lines에 한줄씩 리스트로 불러옴.
lines = score_file.readlines()
for line in lines:
    index +=1
    print("{} : {}".format(index, line), end = "")
score_file.close()
print()
  • 변수 = open(”파일명”, “타입”, encoding = “utf8”) 로 파일 입출력 가능.
    ㄴ 다만 이케이스의 경우 변수.close()로 꼭 닫아줘야 한다.
    ㄴ 타입의 경우, w = 쓰기, r = 읽기, a = 덮어쓰기 이다.
  • 쓰기/덮어쓰기에서 변수.write(”내용”) or print(”내용”) 으로 입력 가능하다.
    ㄴ write 는 줄바꿈되지않고, print는 줄바꿈되어 들어간다.
  • 읽기에서 변수.read~ 으로 파일 내 내용을 읽을을 수 있다.
    ㄴ readline() = 커서가 있는 줄을 읽고 다음 줄로 이동됨
    ㄴ read() = 커서가 있는 시점부터 나머지 내용을 전부 읽음.
    ㄴ readlines() = 커서가 있는 시점부터 나머지 내용을 줄 단위로 list로 불러옴.
  • 파일이 몇줄인지 모르면 무한루프/readlines를 사용해 불러올 수 있다.
## pickle
# 사용하고 있는 데이터를 파일형태로 저장 후 재사용할 수 있음.
import pickle
# write biinary, pickle타입은 무조건 binary 타입을 정의해야함.
profile_file = open("profile.pickle","wb")
profile = {"이름":"조OO", "나이":30, "취미":["영어", "게임", "코딩"]}
print(profile)
# profile에 있는 정보를 file에 저장.
pickle.dump(profile,profile_file)
profile_file.close()

# read biinary, pickle타입은 무조건 binary 타입을 정의해야함.
profile_file = open("profile.pickle","rb")
# profile_file에 있는 정보를 profile 에 불러오기
profile = pickle.load(profile_file)
print(profile)
profile_file.close()
  • pickle은 사용하고 있는 데이터를 파일형태로 저장 후 재사용할 수 있다.
  • pickle은 무조건 binary 타입으로 정의되어야 한다.
  • pickle.dump(내용변수 , 파일변수) 를 통해 파일에 내용을 삽입할 수 있다.
## with
# profile.pickle을 열어 profile_file이라는 변수에 저장.
# 이 파일 내용을 pickle.load를 퉁해 불러오기함.
# close를 할 필요가 없음.
with open("profile.pickle","rb") as profile_file:
    print(pickle.load(profile_file))

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

with open("score.txt", "r", encoding="utf8") as study_file:
    print(study_file.read())
  • with 를 사용하면 파일을 close할 필요 없이 사용할 수 있다.
## 퀴즈
'''
매주 1회 보고서 작성해야 하며 형식이 지정되어있음 (참고)
1~5주차까지 보고서 파일을 만드는 프로그램 작성.
'''
for i in range(1,6):
    with open("{} 주차.txt".format(i), "w",encoding="utf8") as report:
        report.write("- {}주차 주간보고 -\\n".format(i))
        report.write("부서 : \\n이름 : \\n업무 요약 : ")

 

'python' 카테고리의 다른 글

예외처리.py  (0) 2023.03.17
클래스.py  (0) 2023.03.17
함수.py  (0) 2023.03.11
분기.py  (0) 2023.03.11
자료구조.py  (0) 2023.03.11