2017 멀티캠퍼스/Python

[Python] #12 파이썬 파일 입출력

꿈꾸는어린이 2018. 1. 14. 00:47

//

일시 : 2018. 01. 08

내용 : chap 10 파일에 읽고 쓰는 방법(파일 처리)

//


파일 입출력

  • 콘솔(모니터, 키보드)의 표준 입출력과 비슷

    표준 입력 input() : 키보드로 입력받음 -> 표준 출력 print() : 모니터로 출력

  • 파일 입력 read(), readline(), readlines() : 파일의 내용을 읽어오기

  • 파일 출력 write(), writelines() : 파일에 내용을 쓰기

  • 파일을 이용한 입력을 하는 이유?

    => 입력할 데이터의 분량이 많을 경우, 파일에 데이터를 저장해두고 사용하는 것이 효율적.

  • 파일을 이용한 출력을 하는 이유?

=> 모니터 출력은 결과를 한 번만 볼 수 있음.


파일 입출력 과정

  1. 파일 열기

    변수 = open("파일명", "모드(Mode)")

    마지막 매개변수 mode에는 대표적으로 "r", "w"(파일이 없으면 새로 만들고 있으면 덮어씀)

    그 밖에 "r+" (읽기+쓰기), "a" (기존 파일에 이어서 씀. append),

    "t" (텍스트모드), "b" (바이너리 모드) 가 있음

  2. 파일 처리

    파일을 읽어오거나 데이터를 쓰거나 파일 처리.

  3. 파일 닫기

    변수명.close()



파일 입력

  • readline() : 파일의 내용을 한 줄씩 읽어옴.

  inFp = None
inStr = ""

inFp = open("data1.txt", "r", encoding="utf-8")

while True:
   inStr = inFp.readline()
   if inStr =="":
       break
   print(inStr, end='')
   
inFp.close()


  • readlines() : 파일의 내용을 통째로 읽어서 각 행을 '리스트'에 저장.




  • 입력한 파일이 존재하지 않을 경우에는 오류 방지를 위해 os.path.exists(파일명) 사용

  • 파일이 존재하면 True 반환.

  • import os

  
import os

inFp = None
inStr = ""

fName = input("파일명을 입력하세요 : ")

if os.path.exists(fName):
   inFp = open(fName, "r")

   inStr = inFp.readlines()
   for i in inStr:
       print(i, end="")
       
   inFp.close()
else:
   print("파일이 없습니다.")



파일 출력

파일 출력 코드 작성 후 data2.txt 내용을 확인.

  
outFp = None
outStr = ""

outFp = open("data2.txt", "w", encoding="utf-8")

while True:
   outStr = input("내용 입력 : ")
   if outStr == "":
       break
   else:
       outFp.writelines(outStr + "\n")
       
outFp.close()
print("-- success -- ")



data2.txt를 읽어와 data3.txt로 출력하기 (= 복사하기)

  
inFp, outFp = None, None
inStr = ""

inFp = open("data2.txt", "r", encoding="utf-8")
outFp = open("data3.txt", "w", encoding="utf-8")

inStr = inFp.readlines()
for i in inStr:
   outFp.writelines(i)
   
inFp.close()
outFp.close()
print("-- success -- ")



바이너리 파일

  • 바이너리(이진)파일은 텍스트가 아닌 비트(bit)단위

  • 그림 파일, 음악 파일, 실행 파일 등등..

  • 별도의 sw를 통해 열어서 사용 o

  • 모드 설정 "rb", "wb"

  • readline(), writeline()이 아닌 한 바이트씩 처리하는 read(), write() 함수를 이용





실습

파일 암호화, 암호 해독 프로그램

  • ord(문자) : 문자의 유니코드를 알려줌

  • chr(숫자) : 숫자에 해당하는 문자를 알려줌

  • 암호화 +100, 암호 해독 -100

  
inFp, outFp = None, None
inStr, outStr = "", ""
secu = 0
i = 0

select = input("1.암호화 2.암호 해석 중 선택 : ")
inFname = input("입력 파일명을 입력하세요 : ")
outFname = input("출력 파일명을 입력하세요 : ")

if select == 1:
   secu = 100
elif select == 2:
   secu = -100
   
inFp = open(inFname, "r", encoding="utf-8")
outFp = open(outFname, "w", encoding="utf-8")

while True:
   inStr = inFp.readline()
   if not inStr:
       ##문자열 객체 하나도 없으면 True반환
       break
   
   outStr=""
   
   for i in range(0, len(inStr)):
       ch = inStr[i]
       chNum = ord(ch)
       chNum = chNum + secu
       ch2 = chr(chNum)
       outStr += ch2
       
   outFp.write(outStr)
   
outFp.close()
inFp.close()
print("%s --> %s 변환 " % (inFname, outFname))