PYTHON. 04장 프로그램의 입력과 출력. 04-3 파일 읽고 쓰기


* 파일 생성하기

// 에디터로 작성해서 저장한 후 실행해 보자. 
// 프로그램을 실행한 디렉터리에 새로운 파일이 하나 생성된 것을 확인할 수 있을 것이다

f = open("새파일.txt", 'w') f.close()

//파일을 생성하기 위해 우리는 open이라는 파이썬 내장 함수를 사용했다. 
// open 함수는 다음과 같이 "파일 이름"과 "파일 열기 모드"를 입력값으로 받고 결과값으로 파일 객체를 돌려준다


파일 객체 = open(파일 이름, 파일 열기 모드)


파일열기모드설명
r읽기모드 - 파일을 읽기만 할 때 사용
w쓰기모드 - 파일에 내용을 쓸 때 사용
a추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용


// 파일을 쓰기 모드로 열게 되면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다. // 위의 예에서는 디렉터리에 파일이 없는 상태에서 새파일.txt를 쓰기 모드인 'w'로 열었기 때문에 새파일.txt라는 이름의 새로운 파일이 현재 디렉터리에 생성되는 것이다. 만약 새파일.txt라는 파일을 C:/Python이라는 디렉터리에 생성하고 싶다면 다음과 같이 작성해야 한다.

f = open("C:/Python/새파일.txt", 'w') f.close()

// 위의 예에서 f.close()는 열려 있는 파일 객체를 닫아 주는 역할을 한다. // 사실 이 문장은 생략해도 된다. 프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일의 객체를 자동으로 닫아주기 때문이다. // 하지만 close()를 사용해서 열려 있는 파일을 직접 닫아 주는 것이 좋다. // 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문이다.


* 파일을 쓰기 모드로 열어 출력값 적기

# writedata.py f = open("C:/Python/새파일.txt", 'w') for i in range(1, 11): data = "%d번째 줄입니다.\n" % i f.write(data) f.close()

위의 프로그램을 다음 프로그램과 비교해 보자.

for i in range(1, 11): data = "%d번째 줄입니다.\n" % i print(data)


// 두 프로그램의 다른 점은 data를 출력하는 방법이다. // 두 번째 방법은 우리가 계속 사용해 왔던 모니터 화면에 출력하는 방법이고, // 첫 번째 방법은 모니터 화면 대신 파일에 결과값을 적는 방법이다. // 두 방법의 차이점은 print 대신 파일 객체 f의 write 함수를 이용한 것 말고는 없다. 이제 첫 번째 예제를 실행해 보자.

C:\Users> cd C:\Python C:\Python>python writedata.py C:\Python>

위처럼 디렉터리에 파일이 없다가 다음과 같이 생성된다.



새파일.txt 파일에는 어떤 내용이 담겨 있는지 확인해 보자.

모니터 화면에 바로 출력될 내용이 고스란히 파일에 들어가 있는 것을 볼 수 있다.


* 프로그램의 외부에 저장된 파일을 읽는 여러 가지 방법

* readline() 함수 이용하기


# readline.py f = open("C:/Python/새파일.txt", 'r') line = f.readline() print(line) f.close()

// 위 예는 f.open("새파일.txt", 'r')로 파일을 읽기 모드로 연 후 readline()을 이용해서 파일의 첫 번째 줄을 읽어 출력하는 경우이다. // 이전에 만들었던 새파일.txt를 수정하거나 지우지 않았다면 위 프로그램을 실행시켰을 때 새파일.txt의 가장 첫 번째 줄이 화면에 출력될 것이다.

>> 1번째 줄입니다.

만약 모든 라인을 읽어서 화면에 출력하고 싶다면 다음과 같이 작성하면 된다.

# readline_all.py f = open("C:/Python/새파일.txt", 'r') while True: line = f.readline() if not line: break print(line) f.close()

while 1: data = input() if not data: break print(data)

* readlines() 함수 이용하기

f = open("C:/Python/새파일.txt", 'r') lines = f.readlines() for line in lines: print(line) f.close()

* read() 함수 이용하기
f = open("C:/Python/새파일.txt", 'r') data = f.read() print(data) f.close()


// f.read()는 파일의 내용 전체를 문자열로 리턴한다. 따라서 위 예의 data는 파일의 전체 내용이다.

* with문과 함께 사용하기

지금까지 살펴본 예제를 보면 항상 다음과 같은 방식으로 파일을 열고 닫아 왔다.


f = open("foo.txt", 'w') f.write("Life is too short, you need python") f.close()

// 파일을 열면 위와 같이 항상 close해 주는 것이 좋다. 하지만 이렇게 파일을 열고 닫는 것을 자동으로 처리할 수 있다면 편리하지 않을까?

// 파이썬의 with문이 바로 이런 역할을 해준다. 다음의 예는 with문을 이용해서 위 예제를 다시 작성한 모습이다.


with open("foo.txt", "w") as f: f.write("Life is too short, you need python")


// 위와 같이 with문을 이용하면 with 블록을 벗어나는 순간 열린 파일 객체 f가 자동으로 close되어 편리하다. 


Posted by 너래쟁이
: