Python

Python - 파일 입출력

구름이팡팡 2021. 7. 13. 17:03
728x90

<파일 입출력>

: 파일을 열어 자료를 읽거나, 쓰거나, 수정한 후 파일을 닫는 작업

- 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의 약자

 

728x90