수업(국비지원)/Python
[Python] 파일 읽기
byeolsub
2023. 4. 24. 20:47
#### 파일 읽기
'''
open("파일명",파일모드,[인코딩])
인코딩 : 파일의 저장방식. text파일에만 있음. 기본값 : cp949형식
파일코드
r : 읽기
w : 쓰기. 기본의 파일의 내용을 무시. 새로운 내용으로 추가
a : 쓰기. 기존의 파일의 내용에 추가.
t : text모드. 기본값
b : 이진모드. binary모드. 이미지, 동영상,...
'''
📌 #### 파일 읽기
#### 파일 읽기
infp = open\\ #절대경로
("C:/Users/KITCOOP/.spyder-py3/수업/2022-11-29.py","rt",encoding="UTF-8")
while True :
instr = infp.readline() #한줄씩 읽기
if instr == None or instr == '' :
break
print(instr,end="") #화면에 출력
infp.close()
📌 # 파일 쓰기
# 파일 쓰기 : 콘솔에서 내용을 입력받아서 파일로 저장
#현재 폴더의 data.txt 파일에 저장
outfp = open("data.txt","w",encoding="UTF-8") #현재경로
while True :
outstr = input("내용입력=>")
if outstr == '' :
break
outfp.writelines(outstr+"\\n") #한줄씩 파일에 쓰기
outfp.close()
❓ #문제 data.txt 파일을 읽어서 화면에 출력하기
# 문제 : data.txt 파일을 읽어서 화면에 출력하기
#1
infp2 = open("data.txt","rt",encoding="UTF-8") #r or rt
while True :
instr = infp2.readline() # 한줄씩 읽기
if instr == None or instr == '' :
break
print(instr,end="") # 화면에 출력
infp2.close()
#2
infp = open("data.txt","rt",encoding="UTF-8")
print(infp.read())
infp.close()
#3
infp = open("data.txt","rt",encoding="UTF-8")
print(infp.readlines())
infp.close()
'''
readline() : 한줄씩 읽기
read() : 버퍼의 크기만큼 한번 읽기
readlines() : 한줄씩 한번에 읽어서 줄별로 리스트로 리턴
'''
📌
#이미지 파일을 읽어 복사하기
#apple.gif 파일을 읽어서 apple2.gif 파일로 복사하기
infp = open("apple.gif", "rb") #원본파일. 읽기 위한 파일
outfp = open("apple2.gif","wb") #복사본파일. 쓰기 위한 파일
while True :
indata = infp.read() #설정된 버퍼의 크기만큰 읽기
if not indata : #파일의 끝,EOF(End of File)
break # = 파일을 더 이상 읽을필요없음.
outfp.write(indata) #읽을 파일이 더 있다면 복사본파일에 데이터 쓰기
infp.close()
outfp.close()
❓
# 문제 : score.txt 파일을 읽어서 점수의 총점과 평균 구하기
#
# score.txt 내용
# 홍길동,100
# 김삿갓,50
# 이몽룡,90
# 임꺽정,80
#1
import re
infp = open("score.txt","r",encoding="UTF-8")
instr = infp.read()
print(instr)
pattern = re.compile("\\\\d+")
list1 = re.findall(pattern,instr)
print(list1)
list1 = list(map(int,list1))
print("총점:",sum(list1),"평균:",sum(list1)/len(list1))
#2
import re
infp = open("score.txt","r",encoding="UTF-8")
data = infp.read()
print(data)
pattern = re.compile("\\\\d+") #숫자 1개이상
#data에서 숫자들 찾아서 리스트 리턴
scorelist = re.findall(pattern, data)
scorelist = list(map(int,scorelist))
print("총합:",sum(scorelist),\\
",평균:",sum(scorelist)/len(scorelist))
#3
import re
infp = open("score.txt","r",encoding="UTF-8")
data = infp.read()
print(data)
#\\\\d+ : 숫자 한개 이상
#\\\\d{1,3} 숫자 한개이상 3개 미만(1~2번째 값)
pattern = re.compile("\\\\d+") #숫자 1개이상
#pattern = re.compile("\\\\d{1,3}") #숫자 1개이상 3개 미만
#data에서 숫자들 찾아서 리스트 리턴
scorelist = re.findall(pattern, data)
print(scorelist)
#요소의 자료형 int형으로 변환
scorelist = list(map(int,scorelist))
print("총합:",sum(scorelist),\\
",평균:",sum(scorelist)/len(scorelist))