본문 바로가기
Python/Python Library

파일 읽고 쓰기 (Reading and Write Files)

by 가므자 2012. 4. 23.

open()함수는 file 객체를 return 해주는 함수이며, 대부분 매개변수는 두개(filename, open mode) 입니다.

1
2
>>> f = open('/tmp/workfile','w') # 윈도우에서는 폴더구분을 \(역슬래쉬)로 하지만 윈도우 파이썬은
# \(역슬래쉬)가 아닌 /(슬래쉬)를 사용합니다.


첫번째 매개변수는 파일이름을 포함한 스트링 입니다. 두번째 매개변수는 파일을 열때 어떤 모드로 열 것인지 설정해주는 값이며, 종류는 아래와 같습니다.

r Read Only
w Write Only
a Appending (뒤에 이어 붙이기)
r+ Read And Write
b Binary Mode

보통 파일들은 텍스트 모드로 열게 됩니다. 이 뜻은 파일을 읽고 쓸때 스트링으로 처리가 되며 기본적으로 UTF-8로 인코딩 되어 있는 파일 입니다.(한글의 경우 ANSI로 저장했을 때 출력이 됩니다. UTF-8로는 read가 안되었으며, 이것에 대해서는 좀더 연구가 필요해 보입니다.)
파일을 열때(open함수)open mode에 'b'를 넣어주면 데이터를 바이트 객체 형태로 읽고 쓰게 됩니다. 이 파일은 텍스트를 포함 할 수 없습니다.

파일 객체의 메소드
read() read()메소드는 파일을 읽는 메소드 입니다.
seek() 파일 위치 찾기 입니다. 매개변수는 정수타입이 들어갑니다.
readline() 현재커서에서 한줄을 읽습니다.
readlines() 현재커서에 모든 줄을 읽고, 리스트타입으로 return 합니다.

아래 내용이 있는 텍스트 파일을 만들었습니다.

Hello Python!

^^

그리고 저는 D:\testFile.txt로 저장을 했지요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>>> f = open('d:/testFile.txt','r')
>>> f.read(5) # 5Byte 읽기
'Hello'
>>> f.read() # 현재 커서에서 끝까지 읽기
' Python!\n^^'
>>> f.seek(0) # 시작지점은 0, 만약 1을 입력하면 시작지점에서 1Byte 지점으로 커서가 이동한다.
0
>>> f.readline() # 한줄 읽기
'Hello Python!\n'
>>> f.readline()
'^^'
>>> f.readlines() # 파일의 모든 라인을 읽어 리스트 형태로 return 한다.
['Hello Python!\n', '^^']
>>> for line in f:
print(line, end=' ') # for문으로 line 읽기
Hello Python!
^^
>>> f.close() # 파일 객체 닫기

위의 내용은 기본적으로 파일을 읽고 탐색하는 정도 입니다.

python에는 좀더 유용한 모듈도 있습니다. 바로 pickle이라는 모듈입니다. pickle은 복잡한 데이터 객체를 통채로 파일에 저장할 수도 있고, 한번에 데이터 객체로 불러들일 수 있습니다.
예제를 보면 아주 쉽습니다.
1
2
3
4
5
6
7
8
9
>>> users = {'kim':4999, 'jack':2333} #dictionary 객체를 만들었습니다.
>>> f = open('test', 'wb') # 바이너리 쓰기모드로 파일을 생성합니다.
>> pickle.dump(users, f) # users객체를 파일(f)에 씁니다.
>>> f.close() # 파일을 닫고..
>>> del f
>>> f = open('test', 'rb') # 파일을 바이너리 읽기모드로 엽니다.
>>> other = pickle.load(f) # 파일(f)를 읽습니다.
>>> other # other를 출력합니다.
{'jack': 2333, 'kim': 4999} # 제대로 출력됩니다.

 

참 쉽죠 : )

출처 : http://devsw.tistory.com/40

'Python > Python Library' 카테고리의 다른 글

sys 모듈  (0) 2012.04.23
re 모듈  (0) 2012.04.20
sys.argv  (0) 2012.04.20

댓글