일시 : 2018. 01. 08
내용 : chap 10 파일에 읽고 쓰는 방법(파일 처리)
//
파일 입출력
콘솔(모니터, 키보드)의 표준 입출력과 비슷
표준 입력 input() : 키보드로 입력받음 -> 표준 출력 print() : 모니터로 출력
파일 입력 read(), readline(), readlines() : 파일의 내용을 읽어오기
파일 출력 write(), writelines() : 파일에 내용을 쓰기
파일을 이용한 입력을 하는 이유?
=> 입력할 데이터의 분량이 많을 경우, 파일에 데이터를 저장해두고 사용하는 것이 효율적.
파일을 이용한 출력을 하는 이유?
=> 모니터 출력은 결과를 한 번만 볼 수 있음.
파일 입출력 과정
파일 열기
변수 = open("파일명", "모드(Mode)")
마지막 매개변수 mode에는 대표적으로 "r", "w"(파일이 없으면 새로 만들고 있으면 덮어씀)
그 밖에 "r+" (읽기+쓰기), "a" (기존 파일에 이어서 씀. append),
"t" (텍스트모드), "b" (바이너리 모드) 가 있음
파일 처리
파일을 읽어오거나 데이터를 쓰거나 파일 처리.
파일 닫기
변수명.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))
'2017 멀티캠퍼스 > Python' 카테고리의 다른 글
[Python] #14 파이썬 객체 지향 : 생성자와 상속 (0) | 2018.01.14 |
---|---|
[Python] #13 파이썬 객체 지향 : 클래스 (0) | 2018.01.14 |
# 파이썬 사후 평가 오답 (0) | 2018.01.11 |
[Python] #11 파이썬 함수와 모듈 (0) | 2018.01.09 |
[Python] #10 파이썬 문자열 (0) | 2018.01.09 |