Python - 파일 입출력
<파일 입출력>
: 파일을 열어 자료를 읽거나, 쓰거나, 수정한 후 파일을 닫는 작업
- open("디렉토리 경로 및 파일이름", '모드') → 읽기, 쓰기, 수정하기 → close()
cf) 파일 처리 후 close()로 닫아주어야만 자원 점유를 해제하고 불필요한 오류 발생을 막을 수 있음
- 파일명으로 파일을 생성 후 write 함수를 활용해 내용 작성 가능
cf) 디렉토리 경로 없이 파일명만 적은 경우 현재 해당 파이썬이 실행되는 경로에 파일 생성(os라는 모듈을 활용해 현재 디렉토리 경로 확인 가능
- 특정 경로에 파일을 생성하고 싶을 때는 전체 경로 및 파일명 입력
ex) "C:\\Users\\Downloads\\a.txt": 경로 설정 시 \\ 두번!! (\ 한 번은 이스케이프 문자)
- 리스트, 튜플 등의 내용을 입력하는 방법: writelines() 함수 사용
<파일 처리 모드의 종류>
- r (읽기 모드): 파일 객체를 읽기 모드로 생성, 파일의 처음 위치로 포인터를 이동
· read() 함수로 파일의 전체 내용 불러오기, 읽으려는 파일이 없으면 오류 발생
· readline() 함수로 파일의 내용을 한 줄씩 가져올 수 있음, 더 이상 읽을 줄이 없다면 None() 반환, while + if 제어문을 사용하여 모든 줄 출력 가능
· readlines() 함수로 파일의 내용을 리스트로 가져올 수 있음, 주로 반복문과 함께 사용해 한 줄씩 리스트의 요소로 가져와 활용
- w (쓰기 모드): 파일을 쓰기 모드로 엶
· 파일에 데이터를 쓰면 기존에 파일이 있다면 덮어쓰기 때문에 기존 파일의 내용은 모두 사라짐
· 주어진 파일이 존재하지 않으면 새로운 파일을 만듦
cf) 기존 파일에 새로운 내용 추가: w모드가 아니고 a 모드 사용해야 됨
- x (쓰기 전용): 새 파일 쓰기 모드로 엶, 주어진 이름의 파일이 존재하면 에러 발생
cf) w모드와 기능은 같지만 x모드는 기존 파일이 있다면 오류 발생(덮어쓰기 방지)
- a (추가 모드): 파일을 추가 모드로 엶, 기존 파일의 내용의 끝에 새 내용을 추가하여 기록
- + (갱신 모드): 파일을 읽기와 쓰기가 모두 가능한 모드로 엶
<표준 출력 파일 전환(콘솔 → 파일)>
- 표준입출력: 프로그램 내에서 특정한 장치를 지정하지 않아도 시스템이 default로 사용하는 장치에 입출력하는 것
- 파이썬의 표준 출력은 print() 함수를 활용해 파이썬 쉘 환경(콘솔)에 출력, 파이썬의 sys 모듈을 활용해 표준 출력을 파일로 전환 가능
ex) 표준 출력을 파일로 변경하여 구구단을 파일에 저장하는 코드 작성 import sys f = open("a.txt",'w’) sys.stdout = f for i in range(2,10): for j in range(1,10): print("{} X {} = {}".format(i,j,i*j)) print() f.close() |
- 로그, 에러 등을 기록할 때 활용 가능
- 표준 출력을 잠시 다른 변수에 저장해두고 필요할 때 콘솔로 되돌려서 사용
< 다른 자료형의 파일 입출력>
- 기존 파일 입출력은 단순 텍스트만 파일로 입출력 가능
- 파이썬의 모든 객체들을 그대로 저장 가능: 다른 자료형의 객체의 형태를 그대로 유지하면서 파일에 저장하기 위해 pickle 모듈 활용
cf) pickle 모듈로 파일을 저장할 때는 바이너리 형식으로 입출력해야 함(wb, rb 모드)
<파일 다루기>
: 시스템의 환경 변수, 디렉토리, 파일 등을 제어할 수 있는 파이썬의 OS 모듈을 활용
- 형식: os.함수()
ex) 바탕화면에 python 폴더 생성 후, 파일 생성 import os user = os.getlogin() # 사용자 이름 os.mkdir('C:\\Users\\'+user+'\\Desktop\ \python’) os.chdir('C:\\Users\\'+user+'\\Desktop\ \python') os.getcwd() f = open("a.txt",'w’) f.write("""안녕하세요. 사용자님!""") f.close() |
- listdir 함수로 해당 디렉토리의 파일 목록 반환
ex) print (os.listdir('.'))
cf) . 은 상대경로로 현재 디렉토리 의미
cf) ../ 은 부모 디렉토리 의미
- rename 함수로 파일의 이름 변경
- path.exists 함수로 파일의 존재 유무 확인
- path.abspath 함수로 파일의 존재 유무와 관계 없이 해당 파일의 절대 경로를 반환
cf) 파일이 없어도 생성 가능하므로, 파일을 입력할 때 자주 활용
- path.basename, dirname, split 함수로 해당 파일의 파일명과 경로명을 분리·반환
cf) 파일명과 파일의 경로명을 따로 분리 가능, 환경마다 위치가 다를 경우 자주 활용
- path.splitdrive, splitext 함수로 해당 파일 경로의 드라이브, 확장자를 분리·반환
cf) 저장된 드라이브가 다르거나, doc, docx처럼 확장자가 다를 경우 자주 활용
<디렉토리 다루기>
- 형식: os.함수()
- getcwd() 함수로 현재 작업 중인 디렉토리를 반환
cf) cwd : Current Working Directory의 약자
- chdir() 함수로 현재 작업 중인 디렉토리 경로를 변경
cf) chdir : Change Directory의 약자
- mkdir() 함수로 새로운 폴더 생성
cf) mkdir : Make Directory의 약자