-
파이썬의 파일 입출력Python/study 2013. 12. 18. 01:51
※ 주의사항
아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다.
악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.
해당 문서의 저작권은 해당 저자에게 모두 있습니다. 다른 용도로 사용할 시 법적 조치가 가해질 수 있습니다.
상세 분석
이번에는 파일 입출력을 사용하는 방법에 대하여 알아보도록 하겠습니다.
파일입출력이 무엇이냐? 하면 간단합니다. 외부에 있는 파일로부터 데이터를 가져오거나(파일 입력), 혹은 반대로 외부에 있는 파일로 데이터를 보내는 것(파일 출력)입니다. 입력과 출력의 기준은 우리가 사용하는 파이썬입니다. 파이썬으로 들어오면 입력, 파이썬으로부터 나가면 출력입니다.
바로 예제를 통해 알아보도록 하겠습니다.
1번은 파이썬 스크립트의 내용입니다. 2번은 스크립트에서 사용할 텍스트 파일의 내용입니다. 3번은 스크립트 실행결과구요.
가장 위에 있는 파일 입출력 동작을 취하는 파이썬 스크립트의 내용을 살펴보도록 하겠습니다.
# file.py - ①
f = open("test.txt") - ②
line = f.readline() - ③
while line: - ④
print line,
line = f.readline()
f.close() - ⑤
위와 같은 소스코드를 가지고 있네요. 하나하나 해석해보도록 하겠습니다.
①은 해당 스크립트의 파일명을 나타냅니다. 맨 앞에 '#'이 붙음으로써 주석처리 되었고, 아무런 영향을 미치지 않습니다.
②에 사용된 open()함수는 파일 객체를 반환하는 함수입니다. 무슨말인지 이해가 안되신다구요?
이렇게 보시면 이해가 더 잘 되실거라 생각됩니다. ②에 사용된 명령은 f = open("test.txt") 입니다.
해석하면 f라고 명시된 공간에 test.txt라는 파일의 객체를 생성해서 연결해라.
조금 더 쉽게 말하면 f라고 명시된 공간과 test.txt라는 파일 사이의 연결 통로를 만들어라는 것입니다.
open()함수를 통해 공간 f와 test.txt 파일 사이의 연결 통로를 만들었으니, 이제부터는 f라는 변수를 이용하면 test.txt라는 파일에 접근을 할 수가 있다는 말입니다. 접근할 수 있다는 말은 test.txt라는 파일로부터 데이터를 가져오거나(입력), 반대로 test.txt라는 파일에 데이터를 보낼수 있다는(출력) 말입니다.
정리 23) f = open("test.txt") : "test.txt"라는 파일의 파일 객체를 생성하여 f 변수에 연결합니다.
자 그럼 다음으로 넘어가보도록 하겠습니다.
③은 f 변수를 통해 파일에 실제 접근하는 과정입니다. line이라는 공간을 명시하고 이곳에 f.readline()의 결과.
즉, f 변수에 연결된 test.txt 파일로부터 문자열 한 문장을 읽어와서 저장하라는 말입니다.
그럼 결과적으로 line이라는 공간에는 'Hello World.'라는 문자열이 저장되어 있을 것입니다.
정리 24) f.readline() : readline()함수는 파일 객체에서 사용할 수 있는 함수로, 입력으로부터 끝의 줄바꿈 문자가 있는 곳 까지를 읽어옵니다.
④는 반복문입니다. line이라는 공간에 유효한 값이 있는 동안, 몸체에 해당하는 코드들을 반복한다는 의미입니다.
몸체코드를 보면 line변수에 저장된 데이터를 출력하고, test.txt 파일로부터 다음 문장을 읽어와 line 변수에 저장을 합니다.
여기까지 한번 실행하면 화면에는 'Hello World.'라는 문자열이 출력되었을 것이고, line 변수에는 f 변수에 연결된 test.txt 파일로부터 읽어온 다음 문장인 'My name is Haerakai.'라는 문자열이 들어있을 것입니다.
이후, 반복문이 한번 더 돌면 더이상 test.txt 파일에 존재하는 데이터가 없으므로 빈 문자열이 line 변수에 저장이되고 반복문이 종료될 것입니다.
⑤는 close() 함수로 f 변수와 test.txt 파일 사이의 연결 통로를 끊는다는 의미를 가지고 있습니다. 프로그램을 종료하기 전에는 파일과 변수와의 연결을 끊어주어야 합니다. 사실 그냥 둬도 프로그램이 종료될 때 끊어주긴 합니다.
하지만, 프로그램의 크기가 커지면 해당 파일을 재사용하는 경우도 있을 것입니다. 파일을 재사용하고자 할 때 기존에 있던 연결 통로가 끊어져 있지 않다면, 뒤에서 사용을 하지 못합니다. 프로그램 버그의 원인이 되므로 사용이 끝날을 때에는 확실하게 연결 통로를 끊어주는 것이 올바른 코딩 방법입니다.
정리 25) f.close() : 파일과 명시된 공간과의 연결 통로를 끊습니다.
file.py 스크립트와 test.txt 파일을 통해 파일 입력에 대한 기본적인 사용법들을 알아보았습니다.
제목이 파이썬의 파일 입출력이니 파일 출력에 대한 방법들도 알아보도록 하겠습니다.
기본적인 틀은 같습니다. 시작과 끝은 파일과 명시된 공간과의 연결 통로를 만들고, 끊는 것입니다.
하지만 그 안에서의 동작은 입력을 받는 것이 아닌 파일로 출력을 하는 것이 되겠죠.
파일 출력 동작을 하는 스크립트 fileout.py입니다.
전체적인 동작은 먼저 test_out.txt라는 파일을 생성합니다. 그리고 str 변수에 저장된 문자열을 한 문자씩 char에 저장을 하고, 저장을 할 때마다 test_out.txt라는 파일로 내보내는 것입니다.
그럼 결과적으로 test_out.txt라는 파일에는 haerakai라는 문자열이 찍히게 되는 것입니다.
그럼 앞의 파일 입력과 다른 부분에 대하여 설명을 하도록 하겠습니다.
먼저 파일 객체를 생성하여 연결 통로를 만드는 부분입니다. 기존에는 f = open("파일명") 형식으로 적었습니다.
하지만 이번에는 파일명 뒤에 뭔가 하나 더 있습니다. 바로 'w'라는 문자입니다. f = open("파일명","w")라고 적혀있죠.
여기서 파일명 뒤에 붙는 'w'는 옵션입니다. 파일 변수 사이에 연결 통로를 만들 때에 사용하는 옵션이 3가지가 있습니다.
'r', 'w', 'a' 입니다. 각각 read, write, add의 앞 문자를 따온 것입니다. 'r' 옵션은 read로 파일로부터 읽기만 한다는 의미를 가지고 있습니다. 즉, 파일로부터 입력만 받고 출력은 못하는 것입니다. 반대로 'w' 옵션은 write로 새로운 파일을 생성하여 파일에 데이터를 보내기만 한다는 의미를 가지고 있습니다. 파일로부터 입력은 받지 못하는 것이지요. 만약 기존에 있는 파일을 'w'옵션으로 연다면 기존에 있던 파일의 데이터는 모두 사라집니다. 그리고 'a' 옵션은 add로 파일을 새로 생성하는 'w' 옵션과는 달리 기존에 있는 파일에 데이터를 추가하겠다는 의미를 가집니다.
정리 26) f = open("파일명", "옵션") : 옵션에 따라 다른 목적과 동작으로 파일과 명시된 공간의 연결 통로를 만듭니다.
위의 스크립트에서는 'w'를 사용했으니 새로운 파일을 생성하여 그곳에다가 데이터를 출력하는 것입니다.
그 다음에는 for문을 이용하여 str 변수에 저장된 문자열의 0번부터 8번 위치에 있는 각각의 문자들을 몸체코드가 반복될 때마다 한 문자씩 추출해내 char 변수에 저장을 합니다. 이 동작이 실행된 직후마다 하는 동작으로 f.write(char)가 있습니다.
write()함수를 이용하여 매번 char 변수에 저장되는 데이터를 testout.txt 파일로 내보내는 것입니다.
정리 27) f.write(char) : 인자로 받는 변수에 저장되어있는 데이터를 f 변수와 연결된 파일로 내보냅니다.
위의 예에서는 연결 통로를 만들 때 "w"옵션을 사용하였지만, "a" 옵션을 주고 이전에 사용했던 test.txt 파일과 연결했더라면 test.txt 파일의 내용은 아래와 같이 변했을 것입니다.
Hello World.
My name is haerakai.
haerakai
추가적으로 파일 출력을 할 때 write()함수가 아닌 print문을 이용해서도 데이터를 내보낼 수가 있습니다.
f.write(char)이라는 명령 대신에 print >> f, "%d %c \n" % (i, char)라고 명령을 주었습니다.
그 결과로 test_out.txt 파일에 다음과 같이 데이터가 출력되었습니다.
이처럼 print 문에 '>>'를 붙여서도 파일 출력을 할 수 있습니다.
정리 28) print >> f, "%d %c \n" & (i, char) : print문에 '>>'를 붙이고 파일 객체가 저장된 변수, 출력형식을 주면 파일로 출력이 됩니다.
여기까지 파일 입출력에 대하여 알아보았습니다. 파일 입출력은 유용하게 쓰이니 다른 방법들도 찾아 보시길 바랍니다.
정리모음
정리 23) f = open("test.txt") : "test.txt"라는 파일의 파일 객체를 생성하여 f 변수에 연결합니다.
정리 24) f.readline() : readline()함수는 파일 객체에서 사용할 수 있는 함수로, 입력으로부터 끝의 줄바꿈 문자가 있는 곳 까지를 읽어옵니다.
정리 25) f.close() : 파일과 명시된 공간과의 연결 통로를 끊습니다.정리 26) f = open("파일명", "옵션") : 옵션에 따라 다른 목적과 동작으로 파일과 명시된 공간의 연결 통로를 만듭니다.정리 27) f.write(char) : 인자로 받는 변수에 저장되어있는 데이터를 f 변수와 연결된 파일로 내보냅니다.정리 28) print >> f, "%d %c \n" & (i, char) : print문에 '>>'를 붙이고 파일 객체가 저장된 변수, 출력형식을 주면 파일로 출력이 됩니다.
참고 URL 및 도서
- 파이썬 완벽 가이드, 데이비드 M. 비즐리 저, 2012년, 인사이트 펴냄
- JUMP TO Python, 박응용 저, 2001년, 정보게이트 펴냄
'Python > study' 카테고리의 다른 글
파이썬의 코루틴 (2) 2013.12.18 파이썬의 제네레이터(추가) (0) 2013.12.18 파이썬의 제네레이터와 이더레이터 (8) 2013.12.18 파이썬의 함수 (0) 2013.12.18 파이썬의 반복문 (0) 2013.12.18 파이썬의 조건문 (0) 2013.12.18 파이썬의 자료형 - 사전 (0) 2013.12.18 파이썬의 자료형 - 집합 (0) 2013.12.18 파이썬의 자료형 - 튜플 (0) 2013.12.18 파이썬의 자료형 - 리스트 (0) 2013.12.18