파이썬 파일 open

파이썬 파일 다루기

파이썬 open() 함수 변경 사항

Version 3.3

  • opener 매개 변수 추가
  • 'x'모드 추가
  • IOError에서 OSError로 변경
  • 'x' 모드로 open시 파일이 존재하면 FileExistsError 발생

 

Version 3.4

  • 파일 상속 불가
  • 'u'모드 사용 중지 / Version 4.0에서 제거 예정

 

Version 3.5

  • 시스템 콜이 인터럽트 되고 시그널 처리가 에러를 발생시키지 않으면 open() 함수는 InterruptedError를 발생하는 대신 시스템 호출을 재시도
  • namereplace 오류 처리기 추가

 

Version 3.6

  • os.PathLike를 구현하는 객체를 지원

 

 

파이썬 open() 모드

모드 설명
r 읽기 전용 (Default)
w 파일 덮어쓰기
x 독점 파일 생성용, 파일이 존재할 경우 에러 발생
a 파일 덧붙이기
b 바이너리 모드
t 텍스트 (Default)
+ 갱신용 (읽기/쓰기) 모드

 

※ 주의 사항 ※

w모드로 파일 open시 기존 파일 내용은 초기화됩니다. 때문에 w모드 사용에 신중해야 합니다.

 

 

파이썬 파일 open 방법 (2가지)

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

 

captainbin_open.txt 파일을 읽기 전용으로 open 한다고 가정하겠습니다.

 

파이썬 파일 open 첫 번째 방법

fp = open('captainbin_open.txt', 'r')
print(fp.read())
fp.close()

 

파이썬 파일 open 두 번째 방법

with open('captainbin_open.txt','r') as fp:
	print(fp.read())

 

차이점이 보이시나요? 첫 번째 방법은 파일 핸들링한 후 더 이상 사용하지 않을 때 꼭 close()를 해주어야 합니다. 두 번째 방법은 with문을 사용해 파일을 핸들링했는데 close()가 보이지 않습니다. with문이 종료될 때 파이썬에서 자동으로 close()합니다.

 

대부분 close를 신경 쓰지 않아도 되는 두 번째 방법을 많이 선호합니다. 하지만 늘 그렇듯이 구현하는 로직에 따라 가독성이 좋은 방법을 선택하시는 것이 좋습니다.

 

 

파이썬 파일 객체 메서드 및 속성

종류 설명
file.close() 파일 객체 닫기
file.closed 파일이 닫혔는지 bool형태로 반환
file.encoding 텍스트 모드에서 사용되고 있는 인코딩 방식을 반환
file.flush() 버퍼의 내용을 파일에 기록
file.mode 파일 객체의 모드 조회
file.name 파일 객체의 파일명
file.newlines 파일에서 사용하는 라인개행 출력
file.read([size]) 입력한 size만큼 파일 읽기, size가 없으면 전체 읽기
file.readable() 파일 객체가 읽기 가능한지 bool 형태로 반환
file.readline([size]) 입력한 size만큼 파일 읽기, size가 없으면 라인개행 단위로 한 라인씩 읽기
file.seek([offset],[whence])

파일 포인터 위치 지정

[offset] = 0과 file.tell()의 반환 값만 유효

[whencd] 값

  • 0 : 기본값, offset의 값만큼 포인터 이동
  • 1 : 현재의 포인터 포지션 반환
  • 2 : 파일의 마지막으로 포인터 이동
file.seekable() 파일 포인터 위치 지정 가능 여부를 bool 형태로 반환
file.tell() 현재 파일 포인터의 위치를 반환
file.truncate([position]) 지정한 position 이후의 파일 내용 삭제
file.writable() 파일 객체에 쓰기 가능한지 bool형태로 반환
file.write(str) str 문자를 파일에 기록
file.write(lines) 입력한 lines을 파일에 기록

 

 

예제를 통한 파이썬 파일객체 메서드 및 속성 확인

# 파일 open 
>>> cap_fp = open("captainbin_open.txt","r") 

# 파일명 확인 
>>> cap_fp.name 
'captainbin_open.txt' 

# 모드 확인 
>>> cap_fp.mode 
'r' 

# 인코딩 형식 확인 
>>> cap_fp.encoding 
'cp949' 

# 읽기 가능 유무 확인 
>>> cap_fp.readable() 
True 

# 쓰기 가능 유무 확인 
>>> cap_fp.writable() 
False 

# 파일 객체 close 유무 확인 
>>> cap_fp.closed 
False 
>>> cap_fp.close() 
>>> cap_fp.closed 
True 

# 읽기 쓰기 모드로 open 
>>> cap_fp = open("captainbin_open.txt","a+") 
>>> cap_fp.writable() 
True 

# 파일 쓰기 
>>> print("안녕하세요", file=cap_fp) 
>>> print("captainbin 입니다", file=cap_fp) 

# 파일 포인터 위치 
>>> cap_fp.tell() 
31 

# 파일 포인터 앞으로 이동 
>>> cap_fp.seek(0) 
0 

# 파일 전부 읽기 
>>> cap_fp.read() 
'안녕하세요\ncaptainbin 입니다\n' 

# write메서드와 writelines메서드를 이용한 파일 쓰기 
>>> cap_fp.write("블로그를 ") 
5 
>>> cap_fp.writelines("방문해 ") 
>>> cap_fp.writelines(["주","셔","서"," ","감","사","합","니","다."]) 

# 내용 확인 
>>> cap_fp.seek(0) 
0 
>>> cap_fp.read() 
'안녕하세요\ncaptainbin 입니다\n블로그를 방문해 주셔서 감사합니다.' 

# "."이 빠져서 "\n블로그를~~~" 삭제 
>>> cap_fp.truncate(29) 29 
>>> cap_fp.seek(0) 0 
>>> cap_fp.read() 
'안녕하세요\ncaptainbin 입니다' 

# 라인 개행을 포함한 문자열 파일 쓰기 
>>> cap_fp.write(".\n블로그를 방문해 주셔서 감사합니다.") 
21 

# read() 메서드 size만큼 읽기 
>>> cap_fp.read(5) 
'안녕하세요' 

# readline() 메서드에 size를 입력해도 라인개행까지 읽음 
>>> cap_fp.readline(200) 
'\n' 
>>> cap_fp.readline(200) 
'captainbin 입니다.\n' 
>>> cap_fp.seek(0) 
0 
>>> cap_fp.readline(3) 
'안녕하' 
>>> cap_fp.readline(3) 
'세요\n' 
>>> cap_fp.readline(3) 
'cap' 
>>> cap_fp.readline(3) 
'tai' 
>>> cap_fp.readline(3) 
'nbi' 
>>> cap_fp.readline(3)
 'n 입' 
>>> cap_fp.readline(3) 
'니다.' 
>>> cap_fp.readline(3) 
'\n' 

# 현재 파일 포인터 값 확인하기 
>>> cap_fp.seek(0,1) 
32 
>>> cap_fp.tell() 
32 

# 파일 포인터 파일의 맨 처음으로 이동하기 
>>> cap_fp.seek(0,0) 
0 
>>> cap_fp.tell() 
0 

# 파일 포인터 파일의 맨 마지막으로 이동하기 
>>> cap_fp.seek(0,2) 
66 
>>> cap_fp.tell() 
66 

# 문자개행 처리된 파일 내용 출력하기 
>>> print(cap_fp.read()) 
안녕하세요 
captainbin 입니다. 
블로그를 방문해 주셔서 감사합니다. 

# 파일 객체 파일 닫힘 유무 확인 
>>> cap_fp.closed 
False 
>>> cap_fp.close() 
>>> cap_fp.closed 
True

 

MORE