1 life 2 live
파이썬 기초 프로그래밍(9-1) - 파일처리 [20.7.28] 본문
1. 파일처리 개요
■ 가계부 프로그램을 만들어보자!
º 매일 매일의 지출 내역과 수입 내역을 기록하고,
º 지출 / 수입 내역을 바탕으로 일별 수익도 계산하고,
º 주 / 월간 수익 통계 등의 계산을 제공하자!
■ 그런데 프로그램을 종료하면 → 처음부터 다시!
■ 프로그램에서 관리되는 데이터를 연구적으로 저장하고, 처리하기 위한 방안이 필요!
■ 데이터를 어디에 저장 할 것인가?
º 메모리: 임시 저장 공간
º 파일: 영구적인 저장 공간

2. 파일처리 흐름
■ 파일 열기
º 파일 처리 작업을 수행 할 대상 파일을 열기 (파일에 연결)
º 파일을 조작할 수 있는 “파일 객체” 획득
■ 파일 처리
º 파일 객체를 바탕으로 다양한 작업 수행
º 읽기/쓰기/내용 추가하기 등등..
■ 파일 닫기
º 파일 처리가 모두 완료되면 열었던 파일을 닫기 (파일 연결 해제)
3. 파일 열기
■ open() 함수
º 파일 처리를 위한 파일 객체를 획득하는 함수
º 입출력 모드에 따라 파일 생성, 내용 추가, 읽기 등 동작 가능
º 호출 방법


■ 파일 생성
º open([파일명], “w”)
º 파일명의 파일을 쓰기가 가능한 모드로 열기!
■ 예제)
º “test.text”라는 이름의 파일을 ‘쓰기’ 위하여 열어보자!

º 파일은 어디에 저장되어있는가? → test.py의 위치

■ 파일명 표현 방법
º 절대 경로 : 해당 파일의 포함한 전체 경로
• 시스템 내에서 절대적으로 통용되는 경로
• 예) C:/Python/test.txt
º 상대 경로 : 현재 작업 폴더를 기준으로 상대적인 경로
• ‘상대적’인 위치를 활용하여 경로를 표기
º 현재 폴더의, 상위 폴더의, 상위의 상위 폴더의, …
• 예1) test.txt : 현재 작업 폴더에 있는 파일
• 예2) Proj1/test.txt : 현재 작업 폴더의 하위 폴더인 Proj1 폴더안의 파일
• 예3) ../test.txt : 현재 작업 폴더의 상위 폴더안의 파일
■ 파일 생성 확인
º 실행 후 화면

4. 파일 내용 쓰기
■ 파일 열기
º open([파일명], “w”)
º 파일명의 파일을 쓰기가 가능한 모드로 열기!
■ 파일 내용 쓰기
º 반환받은 파일 객체의 write() 메소드 이용
º write() 함수는 쓰여진 문자의 개수를 결과값으로 반환 함
■ 호출 방법

■ “test.txt” 파일에 문자열 쓰기 1

■ “test.txt” 파일에 문자열 쓰기 2


■ “test.txt” 파일에 문자열 쓰기 3

■ 윈도우 Pycharm에서 한글이 깨질 경우, 인코딩 재설정
º Cp949 (MS949/x-windows-949로 설정)
■ “test.txt” 파일에 여러 줄의 내용 쓰기

º 특수 문자를 이용하여 개행 처리 (‘\n’)

■ 파일 열기 ‘w’모드 + write()
º 1) 파일의 기존 내용을 모두 지우고,
º 2) 쓰기를 진행한다!
5. 파일 내용 추가하기
■ 파일 열기
º open([파일명], “a”)
º 파일명의 파일을 내용 추가가 가능한 모드로 열기!
■ 파일 내용 추가하기
º 반환받은 파일 객체의 write() 메소드 이용
º write() 함수는 쓰여진 문자의 개수를 결과값으로 반환 함
■ 호출 방법

■ “test.txt” 파일에 내용 추가하기

■ 파일의 기존 내용 끝에 새로운 내용이 추가 됨!

6. 파일 내용 읽기
■ 파일 열기
º open([파일명], “r”)
º 파일명의 파일을 읽기가 가능한 모드로 열기!
■ 파일 내용 읽기
º 반환받은 파일 객체의 읽기 관련 메소드 이용
º “파일 포인터"에 의하여 가리키는 지점부터 읽기를 수행

■ 파일 포인터
º 파일 내용이 접근 될 위치를 표시
º 파일에 대한 쓰기/읽기 동작을 수행 시 파일포인터의 위치가 변경됨

■ read()
º 파일 포인터 이후의 전체 내용을 문자열 형태로 읽기
º 파일의 끝에 도달한 후에는 빈 문자 (‘’)를 반환
º “test.txt” 파일에서 파일 포인터 이후의 전체 내용 읽기

■ read(count)
º 파일 포인터 이후 count 개의 문자를 읽기

■ readline()
º 파일 포인터 이후의 내용 중 한 줄을 문자열로 읽기
º 파일의 끝에 도달한 후에는 빈 문자 (‘’)를 반환

■ for 구문 + 파일 객체 : 파일에서 한 줄 씩 읽어준다!

■ readlines()
º 파일 포인터 이후 전체 내용을 줄 단위 읽고 문자열의 리스트로 반환

■ list() + 파일 객체: readlines()와 동일한 기능 수행

7. 파일 닫기
■ 파일과의 연결을 해제하는 과정
º 파일을 열기 위하여 사용된 시스템 자원들을 모두 해제하는 과정
º 파일에 대한 처리가 모두 완료된 후에 호출하도록 하자!

■ with 구문
º 자동으로 파일 닫기
º 호출 방법

º 사용 예제)

8. 실습
■ 실습1) 수학 문제 풀이 노트를 만들고자 한다. 수학 문제를 콘솔에 제출한 후 사용자가 답을 입력하면 문제와 답을 파일에 순차적으로 저장하는 프로그램을 작성하시오.
º 문제 리스트: "1+2는?", "2*5는?", "3-3은?“
º 저장 파일 이름은 ‘math.txt’로 설정 할 것.

↓정답
quest = ["1+2는?","2*5는?", "3-3은?"]
with open('math.txt','w') as file:
for i in quest:
answer = input(i)
file.write(i+answer+"\n")
■ 실습2) 파일을 복사하는 함수를 작성하시오
º 1.txt 파일을 만들고 아래 내용을 기입할 것

º 복사 된 파일의 이름을 입력하면 해당 이름으로 파일 복사를 진행한 후 파일 내용 확인

º 함수 호출 방법

º 파일 복사 프로그램 실행 예제)

↓정답
def copy_file(src_file, dest_file):
with open('1.txt', 'r') as src, open(dest_file, 'w') as dest:
dest.write(src.read())
print('copy가 완료되었습니다.')
print('%s 파일을 열어서 확인해보세요!' % dest_file)
dest = input('파일의 이름을 입력해주세요: ')
copy_file('1.txt',dest)
■ 실습3) 파일안에 저장되어 있는 내용들을 모두 읽어서 1) 문장, 2) 단어, 3) 알파벳이 각각 몇 개씩 저장되어 있는지 출력하시오.
º 파일에는 아래 내용을 미리 넣어 놓을 것
|
Computer engineering has been rapidly changed than any other academic disciplines; these changes are immediately reflected in the industrial field. Computer engineering curriculum has been reviewed the latest technology trends and industry needs to respond to these rapid changes then restructured its operations on a regular basis. In order to reflect the latest technology direction and national demand for computer engineering, current curriculum is consisting of embedded systems, system software, and computer networks/security sectors; the three specialized educational direction. According to basic major, core major and in-depth major classifications, each course was systematically organized for each track. In addition, through the team project courses and industry on-the-job training courses, students can have the creative practical problem solving skills. |
º 문장: 줄 바꿈 문자 기준으로 분리 가능
º 단어: 공백 기준으로 분리 가능
º 알파벳: 단어의 각 문자
º 프로그램 실행 예제)

↓정답
dict = {}
alpha_count=0
word_count=0
with open('text.txt', 'r') as file:
sentences = list(file)
for s in sentences:
s.replace(',','').replace('.','').strip()
words = s.split()
word_count+=len(words)
for word in words:
for char in word:
if char.isalpha(): alpha_count += 1
print("문장:", len(sentences))
print("단어:", word_count)
print("알파벳:", alpha_count)
'파이썬' 카테고리의 다른 글
| 파이썬 기초 프로그래밍(10) - 모듈 프로그래밍 [20.7.30] (0) | 2020.07.30 |
|---|---|
| 파이썬 기초 프로그래밍(9-2) - 파일 예외 처리 [20.7.29] (0) | 2020.07.29 |
| 파이썬 기초 프로그래밍(8-2) - 함수(지역변수, 전역변수) [20.7.27] (0) | 2020.07.27 |
| 파이썬 기초 프로그래밍(8-1) - 함수(선언, 인자) [20.7.26] (0) | 2020.07.26 |
| 파이썬 기초 프로그래밍(7) - 자료구조3 (문자열) [20.7.25] (0) | 2020.07.25 |