파이썬의 파일 입출력에 대해 알아보도록 하겠습니다.
파이썬의 큰 특징중 하나는 특별한 경우를 제외하곤 자료형을 지정해 주지 않아도 된다는 점 입니다.
이는 파일 입출력 시에도 마찬가지입니다.
기본적으로 파일 입출력은 파일 오픈, 읽기, 쓰기, 파일 닫기의 과정을 거치게 됩니다.
하나하나 알아보도록 하겠습니다.
1. 파일 오픈
파일을 열기 위해서 open() 을 사용하게 됩니다.
사용 방법은 다른 프로그래밍 언어와 비슷합니다.
open 함수의 원형은 다음과 같습니다.
open(파일 경로, 모드)
파일 포인터를 반환합니다.
파일 경로는 상대경로, 절대경로 둘 다 가능하며,
open 함수의 인자로 경로 및 파일명을 직접 입력 할 수도,
문자열 변수로 미리 선언해 놓고, 해당 변수를 입력 할 수도 있습니다.
예를들어 /etc/test.txt 파일을 사용할 경우
ex1) open 함수의 인자로 직접 입력
test_file = open ('/etc/test.txt', 모드)
로 입력 할 수도,
ex2) 경로를 변수로 미리 선언해 놓고, 해당 변수를 인자로 사용
TEST_PATH = '/etc/test.txt'
test_file = open(TEST_PATH, 모드)
로 입력할 수도 있습니다.
만약 한 파일에 대해 open 함수를 많이 사용할 것 같으면 미리 변수로 지정해 놓고 사용하는 것이 좋습니다.
이후 예시에서는 TEST_PATH란 변수를 사용하도록 하겠습니다.
파일 모드는 C와 유사하게 읽기 모드 ('r'), 새로 쓰기 모드 ('w'), 이어 쓰기 모드 ('a')가 있습니다.
'r'은 읽기 전용으로 파일을 오픈합니다. 읽기만 가능하고, 쓰기는 되지 않습니다.
'w' 는 쓰기 모드인데, 파일을 새로 만듭니다. 즉, 이미 동일한 이름의 파일이 있으면 지우고 새로 작성합니다.
'a' 는 쓰기 모드인데, 'w' 와는 다르게 기존 파일에 내용을 이어서 작성합니다.
필요에 따라 모드를 변경하며 쓰시면 됩니다.
ex1) 읽기 모드로 파일을 오픈
test_file = open (TEST_PATH, 'r')
ex) 새로 쓰기 모드로 파일을 오픈
test_file = open (TEST_PATH, 'w')
2. 파일 읽기
파이썬에서는 다양한 읽기용 함수를 제공합니다.
readline(), readlines(), read() 함수 입니다.
각각의 차이점은 다음과 같습니다.
(1) readline() - 파일의 한 줄을 가져와 문자열로 반환합니다. 파일 포인터는 그 다음줄로 이동합니다.
사용 예시는 다음과 같습니다.
str = test_file.readline()
만약 파일을 오픈한 후, 위와 같은 명령어를 사용한다면,
해당 파일의 제일 첫줄을 읽어 str 이라는 변수에 문자열로 저장하게 됩니다.
(2) readlines() - 파일 내용 전체를 가져와 리스트로 반환합니다. 각 줄은 문자열 형태로 리스트의 요소로 저장됩니다.
파일 전체를 읽습니다.
각각의 줄은 문자열로 저장되고,
문자열들을 요소로 갖는 리스트로 반환합니다.
예를들어 10줄짜리 파일을 readlines() 로 읽게 된다면,
문자열 10개를 요소로 갖는 리스트가 반환됩니다.
사용 예시는 다음과 같습니다.
str_list = test_file.readlines()
(str_list 를 print 해보면 ['첫 번째 줄', '두 번째 줄', ...] 의 형태로 보이게 됩니다.)
(3) read() - 파일 내용 전체를 가져와 문자열로 반환합니다.
readlines()와 마찬가지로 파일 내용 전체를 읽습니다.
단, 파일 내용 전체를 하나의 문자열로 반환합니다.
각각의 줄은 '\n' 문자로 구분됩니다.
사용 예시는 다음과 같습니다.
all_str = test_file.read()
3. 파일 쓰기
쓰기 함수로는 write() 함수를 사용합니다.
인자로 문자열을 입력하면, 해당 문자열이 파일에 입력됩니다.
문자열을 미리 지정하여 입력할 수도, print() 함수를 사용할 때 처럼 문자열을 함수 호출 시 직접 입력 할 수도 있습니다.
ex1) 문자열을 미리 지정한 후, 인자로 변수를 입력
str = 'File I/O test'
test_file.write(str)
ex2) 문자열을 직접 인자로 입력
test_file.write('File I/O test')
아래와 같이 입력도 가능합니다.
a = 1
b = 2
test_file.write('%d + %d = %d' %(a, b, a+b))
4, 파일 닫기
어느 프로그래밍 언어든 파일을 오픈한 후엔 항상 닫는 습관을 들이는 것이 중요합니다.
저는 항상 파일을 오픈하는 함수를 사용하면, 바로 파일을 닫는 함수를 작성합니다.
파이썬에서는 파일을 닫기 위해 close() 함수를 사용합니다.
사용 방법은 간단합니다.
test_file.close()
5. 예시
파일 입출력 과정을 차례대로 입력한 예시 입니다.
중간중간 값 확인을 위해 print()를 사용하여 변수를 출력하였습니다.
chpark@ubuntu14-44:~/python$ ls -l
--- 빈 파일 (test.txt) 생성 후 파이썬 실행 ---
합계 0
chpark@ubuntu14-44:~/python$ touch test.txt
chpark@ubuntu14-44:~/python$ ls -l
합계 0
-rw-rw-r-- 1 chpark chpark 0 11월 20 14:32 test.txt
chpark@ubuntu14-44:~/python$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
--- 테스트 파일을 변수 (FILE_PATH)로 지정한 후 새로 쓰기 모드로 파일 오픈 ---
>>> FILE_PATH = './test.txt'
>>> test_file = open(FILE_PATH, 'w')
>>> print(test_file)
<open file './test.txt', mode 'w' at 0x7f90cb48b4b0>
--- 테스트 파일에 내용 작성 (두 줄) ---
>>> test_file.write('Hello python file I/O\n')
>>> str = 'Bye python file I/O\n'
>>> test_file.write(str)
>>> test_file.close()
--- 테스트 파일을 읽기 모드로 오픈 후 readline() 함수 사용 후 파일 닫기 ---
>>> test_file = open(FILE_PATH, 'r')
>>> test_file.readline()
'Hello python file I/O\n'
>>> test_file.readline()
'Bye python file I/O\n'
>>> test_file.readline()
''
>>> test_file.close()
--- 테스트 파일을 읽기 모드로 오픈 후 readlines() 함수 사용 후 파일 닫기 ---
>>> test_file = open(FILE_PATH, 'r')
>>> test_file.readlines()
['Hello python file I/O\n', 'Bye python file I/O\n']
>>> test_file.readlines()
[]
>>> test_file.close()
--- 테스트 파일을 읽기 모드로 오픈 후 read() 함수 사용 후 파일 닫기 ---
>>> test_file = open(FILE_PATH, 'r')
>>> test_file.read()
'Hello python file I/O\nBye python file I/O\n'
>>> test_file.read()
''
>>> test_file.close()
--- 테스트 파일을 새로 쓰기('w') 모드로 열었을 떄와 이어 쓰기('a') 모드로 열었을 때의 차이점 비교 -> 파일의 내용이 사라지는 것을 볼 수 있음.---
>>> test_file = open(FILE_PATH, 'a')
>>> test_file.close()
>>> test_file = open(FILE_PATH, 'r')
>>> test_file.readlines()
['Hello python file I/O\n', 'Bye python file I/O\n']
>>> test_file.close()
>>> test_file = open(FILE_PATH, 'w')
>>> test_file.close()
>>> test_file = open(FILE_PATH, 'r')
>>> test_file.readlines()
[]
>>>
파이썬의 파일 입출력의 기본을 알아보았습니다.
다음 포스팅에서는 파일 입출력 시 예외처리 및 seek() 함수에 대해 알아보도록 하겠습니다.
'Computer Programming > Python' 카테고리의 다른 글
[Python] 파이썬 유니코드 관련 참고 사이트 (0) | 2016.01.07 |
---|---|
[Python] 문자열에서 반복되는 문자열 및 횟수 출력 (질문에 대한 답변) (4) | 2015.11.20 |
[Python] 파이썬 반복문 (while문, for문) (0) | 2015.04.10 |
[Python] 파이썬 조건문 (if 문) (0) | 2015.04.10 |
[Python] 파이썬의 자료형 및 리스트와 리스트 관련 메소드 (0) | 2015.04.10 |