1. 파일 입출력의 기본
(1) 파일 열기
- 읽기용 : 변수명 = open("파일명","r")
- 쓰기용 : 변수명 = open("파일명","w")
(2) 파일 처리
(3) 파일 닫기
- 변수명.close();
모드(Mode) : open() 함수의 마지막 매개변수
- 생략 : r과 동일하다.
- r : 읽기 모드, 기본 값이다.
- w : 쓰기 모드, 기존에 파일이 있으면 덮어쓴다.
- r+ : 읽기/쓰기 겸용 모드이다.
- a : 쓰기 모드, 기존에 파일이 있으면 이어서 쓴다. append의 약어이다.
- t : 텍스트 모드, 텍스트 파일을 처리한다. 기본값이다.
- b : 이진 모드, 이진 파일을 처리한다.
2. 파일 입력
한 행씩 읽어 들이기
- readline() 함수 사용
- 파일로 데이터 입력 후 이를 화면에 출력하는 프로그램
inFp = None # 입력파일
inStr = "" # 읽어온 문자열
inFp = open("data.txt","r",encoding="UTF-8")
inStr = inFp.readline()
print(inStr,end="")
inStr = inFp.readline()
print(inStr,end="")
inStr = inFp.readline()
print(inStr,end="")
inFp.close()
# 결과
CookBook 파이썬을 공부합니다.
완전 재밌어요
파이썬을 공부하기 잘했네요.
- cp949는 encoding 하는 방법 중 하나로, 보통 메모장에서 ANSI로 저장하게 되면 이 CP949로 저장되게 되며 'UTF-8' / 'UTF-16' / 'EUC-KR' 등 많은 방법이 있으며 'UTF-8'을 많이 사용한다.
- python3부터는 ANSI 기준으로 작성된 파일만 읽을 수 있다. UTF-8로 작성된 파일은 보통 방법으로 읽을 때 에러가 난다.
f = open(path, 'r', encoding = 'UTF-8')
inFp = None # 입력 파일
inStr = "" # 읽어온 문자열
inFp = open("data.txt","r",encoding="UTF-8")
while True:
inStr = inFp.readline()
if inStr == "":
break
print(inStr,end = "")
inFp.close()
# 결과
CookBook 파이썬을 공부합니다.
완전 재밌어요
파이썬을 공부하기 잘했네요.
- readlines() 함수 : 파일의 내용을 통째로 읽어서 리스트에 저장
inFp = None # 입력 파일
inStr = "" # 읽어온 문자열
inFp = open("data.txt","r",encoding="UTF-8")
inList = inFp.readlines()
print(inList)
inFp.close()
# 결과
['CookBook 파이썬을 공부합니다.\n', '완전 재밌어요\n', '파이썬을 공부하기 잘했네요.']
close()함수를 호출하지 않고 프로그램을 종료하기
with~as
문으로 파일을 열시 close()함수를 사용하지 않아도 된다.
with open("C:/Temp/data1.txt","r") as inFp:
inList = inFp.readlines()
print(inList)
파일의 내용을 한 행씩 출력
inFp = None # 입력 파일
inStr = "" # 읽어온 문자열
# fname = input("파일명을 입력하세요 : ")
# inFp = open(fname, "r", encoding="UTF-8")
inFp = open("data.txt", "r", encoding="UTF-8")
inList = inFp.readlines()
for inStr in inList:
print(inStr, end="")
inFp.close()
# 결과
CookBook 파이썬을 공부합니다.
완전 재밌어요
파이썬을 공부하기 잘했네요.
도스 명령어 type의 구현
지정한 파일의 내용을 화면에 출력
type 파일명
파일이 없을 때 오류가 발생하지 않게 하려면 os.path.exists(파일명) 형식 사용
import os
inFp = None
fName, inList, inStr = "", [], ""
fName = input("파일명을 입력하세요: ")
if os.path.exists(fName):
inFp = open(fName, "r", encoding="UTF-8")
inList = inFp.readlines()
for inStr in inList:
print(inStr, end = "")
inFp.close()
else :
print("%s 파일이 없습니다"%fName)
# 결과
파일명을 입력하세요: data.txt
CookBook 파이썬을 공부합니다.
완전 재밌어요
파이썬을 공부하기 잘했네요.
3. 파일 출력
출력 결과를 파일에 저장하는 방식(파일에 내용 쓸 때 write()나 writelines() 함수 사용)
한 행씩 파일에 쓰기
outFp = None
outStr = ""
outFp = open("data2.txt","w")
while True:
outStr = input("내용 입력 : ")
if outStr != "":
outFp.writelines(outStr + "\n")
else:
break
outFp.close()
print("---파일에 정상적으로 써졌음 ---")
도스 copy 명령어의 구현
copy 소스파일 타깃파일
chr(i) : 유니코드(Unicode) 값을 입력받아 그 코드에 해당하는 문자를 출력하는 함수이다.
ord(c) : 문자 c의 유니코드 값을 돌려주는 함수이다.
(ord <-> chr)
readline()과 readlines() 함수
readlines() 함수 : 파일 용량이 몇 MB정도면 사용
readline() 함수 : 수백 MB가 넘으면 사용
간단한 파일 처리
with~as
문을 사용하면 텍스트 파일 복사 소스가 간단해진다.
inFp, outFp = None, None
inStr = ""
with open("C:/Windows/win.ini","r") as inFp:
with open("C:/Temp/data4.txt", "w") as outFp:
for inStr in inFp:
outFp.writelines(inStr)
print("---파일이 정상적으로 복사되었음 ---")
4. 이진 파일 입출력
이진(Binary : 바이너리) 파일 : 글자가 아닌 비트(Bit) 단위로 의미가 있는 파일
- 텍스트 파일을 제외한 나머지 파일
- 그림 파일, 음악 파일, 동영상 파일, 엑셀 파일, 실행 ExE 파일 등이 모두 이진 파일
텍스트 파일과 이진 파일을 구분하는 간단한 방법(파일을 메모장에서 열기)
- 열었을 때 글자처럼 보이면 텍스트 파일, 이상하게 보이면 이진 파일
이진 파일의 복사
inFp, outFp = None, None
inStr = ""
# 이진 읽기 모드와 쓰기 모드로 파일 열기
inFp = open("C:/Windows/notepad.exe","rb")
outFp = open("notepad.exe","wb")
# 파일의 끝까지 한 바이트씩 읽어서 한 바이트씩 파일에 쓰기
while True:
inStr = inFp.read(1)
if not inStr:
break
outFp.write(inStr)
inFp.close()
outFp.close()
print("--- 이진 파일이 정상적으로 복사되었음 ---")
참고자료
- Python 수업, ch11 파일 입출력과 Exception Handling - 수정
'컴퓨터공학 언어 > Python' 카테고리의 다른 글
내부 함수, reduce 함수 (0) | 2021.10.27 |
---|---|
iterator, generator (0) | 2021.10.27 |
Algorithm 공부하다 알게된 내용 (0) | 2021.10.26 |
Module과 Package (0) | 2021.10.15 |
함수 (0) | 2021.10.15 |
댓글