본문 바로가기
Programming/Python

파이썬 파일 입출력과 포인터 사용하기

by whitele 2021. 9. 18.
반응형

 

파일 입출력


파이썬에는 기본적으로 텍스트 모드로 파일을 입출력할 수 있습니다. 텍스트 모드와 16진수 단위로 다루는 바이너리 모드로 사용할 수 있습니다. 바이너리 모드는 저수준 모드로 원시 데이터를 직접 다룹니다. 여기에서는 파일 입출력에 대한 도구, 기능들을 다룹니다.

open('test.txt','r') as file: #file=open('test.txt','r') 과 동일
    text=file.read()
    close(file)

일반적으로 다음과 같이 사용한다. 파일 입출력이 끝난 후 close로 마무리해줘야 합니다.

 

 

with 키워드

with 키워드는 사실상 파일 입출력에 있어서 같이 쓰는 것이 좋습니다. with 키워드를 사용하면 close를 사용하지 않아도 됩니다. 만일 예외가 발생하여 파일 입출력이 종료되어도 종료 절차를 자동으로 수행한 후 닫히게 합니다. open 함수를 다 쓰게 되더라도 자동적으로 close를 하기 때문에 with 키워드는 파일 입출력에서 필수적입니다.

with open('test.txt','r') as file:
    str=txt.read()

 

파일 열기 모드

r 텍스트-읽기 모드
w 텍스트 - 쓰기 모드
a 텍스트 - 추가 모드
rb 바이너리 - 읽기 모드
wb 바이너리 - 쓰기 모드
ab 바이너리 - 추가 모드

open 두 번째 인자에 넣는 파일 입출력 모드입니다. 해당 모드에 +를 추가하면 추가적으로 읽기 또는 쓰기 기능이 추가됩니다. 예를 들어 'wb+'는 바이너리로 쓰기하며 추가적으로 읽기가 가능합니다.

 

 

파일 읽기 작업

read 메서드

str = file.read(size = -1)

 기본적으로 파일 전체를 읽어 들입니다. 읽을 바이트 수를 정하는 인자를 받습니다. 기본적으로 -1이며 전체를 읽어 들입니다. 반환은 문자열을 반환하며 바이너리의 경우 문자열이 아닌 데이터입니다.

readline readlines 메서드

 readline은 첫 개행 문자가 나올 때까지 문자열을 반환한다. readlines는 보통의 경우 개행 문자가 반환되지만 파일의 끝을 읽을 경우 개행 문자가 포함되지 않습니다. readline은 개행 문자를 포함하지 않지만 EOF 바로 앞에 개행 문자가 오는 경우 포함합니다. readline는 개행 문자를 포함하지 않지만 EOF 바로 앞에 개행 문자가 오는 경우 포함합니다. 정수 인자 한 개를 받으며 개행 문자가 오거나 매개변수에 입력된 만큼 바이트를 읽어 들입니다.

 

 

파일 쓰기 작업

write 메서드

문자열이나 바이너리를 쓰기 위해 사용합니다. 바이너리 모드의 경우 bytes 문자열 혹은 bytearray로 변환 후 사용해야 합니다. 개행 문자를 자동으로 입력하지 않으며 입력된 데이터나 문자열만 쓰기 작업합니다. 

wrirelines 메서드

 나열된 문자열들을 쓰기 합니다. 개행 문자는 별도로 입력되지 않습니다. 여러 가지 문자열, 즉 리스트로 받아 쓰기 작업할 수 있다는 것이 write 메서드와 차이점입니다.

 

파일 포인터 작업

seek 메서드

seek(p, o)

임의 접근이 가능한 메모리, 파일 시스템의 경우 사용이 가능합니다. (대부분이 사용 가능하다) 지정한 위치에서 p만큼 이동하며 두 번째 인자는 0, 1, 2를 값으로 받습니다. 각각 시작, 현 위치, 끝을 뜻하며 seek(0, 0). 은 파일의 처음으로 갈 때 쓸 수 있습니다. 이 지정한 지점부터 읽기, 쓰기를 할 수 있습니다.

tell 메서드 

 현재 위치를 반환하는 메서드입니다.

 

기타 메서드

 writeable( )

 파일이 수정 가능한 경우 True를 반환합니다. 만약 수정 권한이 없이 파일을 수정할 때 예외가 발생됩니다.

seekable( )

seek 메서드 혹은 tell 메서드가 사용 가능한 경우 True를 반환합니다. 사용 불가시 두 메서드를 사용하게 되면 예외가 발생합니다. 

close( )

파일을 닫고 I/O 버퍼를 비웁니다. 버퍼에 있던 읽기/ 쓰기 작업을 반영한 뒤 종료합니다.

728x90
반응형

댓글