수업(국비지원)/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() : 한줄씩 한번에 읽어서 줄별로 리스트로 리턴
'''

 

📌

콘솔위의 Files에서 apple.gif 파일을 찾아 명령문을 실행하면 apple2.gif가 복사됨.

#이미지 파일을 읽어 복사하기
#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))