티스토리 뷰

반응형

파이썬(Python) 파일 다루는 방법을 정리해보겠습니다.


파이썬 파일 열기(open), 파일 닫기(close)

f = open('file.txt', 'r')
# 읽고 쓰는 코드를 여기에 작성한다.
f.close()

파일을 사용하기 위해서는 open함수로 파일을 열어야 한다.

파일을 다 사용했으면 close함수로 닫아야 한다.

(함수 open, close는 파이썬 내장함수이다.)

파일을 열기위해서는 파일 모드를 지정해야 한다.

파일모드는 rt기본값이며 w+b처럼 다양한 조합이 가능하다.

파일모드를 잘못쓰면 기존 파일 내용이 삭제될 수 있으니 주의바람


파일 모드 종류

r - 읽기모드 (디폴트)

w - 쓰기모드, 파일이 있으면 모든 내용을 삭제

x - 쓰기모드, 파일이 있으면 오류 발생

a - 쓰기모드, 파일이 있으면 뒤에 내용을 추가

+ - 읽기쓰기모드

t - 텍스트 모드, 텍스트 문자 기록에 사용 (디폴트)

b - 바이너리 모드, 바이트단위 데이터 기록에 사용


파일 모드 사용예

f = open('file.txt', 'rt')

기본값으로 텍스트 읽기모드 (rt는 생략 가능)

f = open('file.txt', 'wb')

바이너리 쓰기모드

f = open('file.txt', 'r+t')

텍스트 읽기쓰기모드, 맨 앞에서부터 내용을 덮어쓴다. 

(파일이 없으면 오류 발생)

f = open('file.txt', 'w+t')

텍스트 읽기쓰기모드, 파일 내용을 다 지우고 다시 쓴다.

f = open('file.txt', 'a+t')

텍스트 읽기쓰기모드, 파일의 모든 내용을 남겨두고 맨 뒤에서부터 쓴다.


+가 포함된 파일모드는 모두 읽기쓰기모드이지만 기존 파일 내용을 처리하는 방식에 차이가 있다.


파이썬 파일 쓰기(write, writelines)

f = open('file.txt', 'w')
f.write('파일에 기록될 문자열입니다.\n')
f.write('파일 기록하는거 참 쉽죠?!\n')
f.close()

f = open('file.txt', 'a')
f.writelines(['하나', '둘', '셋', '넷', '다섯']) #리스트를 전달
f.write('\n')
f.writelines('\n'.join(['여섯', '일곱', '여덟', '아홉', '열']))
f.close()

파이썬 파일 쓰기(write, writelines)

write, writelines 함수를 사용하여 파일 쓰기를 한다.

빈칸(\n)이 필요하면 직접 입력을 해야 한다.

리스트 등으로 된 여러 문장을 입력하기 위해 writelines 함수를 사용한다.

문자열을 빈칸(\n)으로 연결하기 위해 string 메서드 join을 사용했다.


파이썬 파일 읽기(read, readline, readlines)

print('##### read 함수 #####')
f = open('file.txt', 'r')
s = f.read()
print(s)
f.close()

print('##### readline 함수 #####')
f = open('file.txt', 'r')
s = f.readline()
print(s, end='')
s = f.readline()
print(s, end='')
for s in f:
    print(s, end='')
f.close()

print('##### readlines 함수 #####')
f = open('file.txt', 'r')
l = f.readlines()
print(l)
s = ''.join(l)
print(s)
f.close()

파이썬 파일 읽기(read, readline, readlines)

read, readline, readlines 함수를 사용하여 파일 읽기를 한다.

read 함수는 모든 파일 내용을 읽어들인다.

readline 함수는 한번에 한 라인씩 읽어들인다.

(for문, readline함수 조합으로도 파일 내용을 출력할 수 있다.)

readlines 함수는 여러 라인을 리스트(List)에 저장한다.

기본적으로 빈칸(개행, \n)이 포함된다.

print() 함수의 end 인자를 사용하여 출력화면을 변경시킬 수 있다.


파이썬 파일 현재 위치 확인(tell) 및 변경(seek)

f = open('file.txt', 'r')
print('파일 현재 위치:', f.tell())
print(f.read())
print('파일 현재 위치:', f.tell())
print()
f.seek(0) # 처음으로
print('파일 현재 위치:', f.tell())
print(f.readline(), end='')
print('파일 현재 위치:', f.tell())
f.close()

파이썬 파일 현재 위치 확인(tell) 및 변경(seek)

tell 함수를 사용하여 파일의 현재 위치를 확인할 수 있다.

seek함수로 파일 현재 위치를 변경한다.

seek(0)을 사용하면 파일의 처음 위치로 돌아간다.


파이썬 pickle 모듈 사용법 (피클링, 바이너리 파일 처리)

import pickle

f = open('file.dat', 'wb')
pickle.dump('hello world', f) #string 덤프
pickle.dump(12345, f) #int 덤프
pickle.dump(3.14, f) #float 덤프
pickle.dump(['one', 'two', 'three', 'four'], f) #list 덤프
pickle.dump({1:'first', 2:'second'}, f) #dict 덤프
f.close()

f = open('file.dat', 'rb')
d = pickle.load(f) #string 로드
print(type(d))
print(d)
d = pickle.load(f) #int 로드
print(type(d))
print(d)
d = pickle.load(f) #float 로드
print(type(d))
print(d)
d = pickle.load(f) #list 로드
print(type(d))
print(d)
d = pickle.load(f) #dict 로드
print(type(d))
print(d)
f.close()

파이썬 바이너리 파일

바이너리 모드로 저장된 파일은 직접 내용을 확인하기가 어렵다.

파이썬 pickle 모듈 사용법

바이너리 모드 파일을 다루기 위해 pickle 모듈을 사용한다.

pickle 모듈을 사용하면 파이썬에서 사용되는 객체를 바이너리 파일로 저장할 수 있다.

바이너리 파일을 쓰기 위해 dump 함수를, 읽기 위해 load 함수를 사용한다.

덤프(dump)한 순서대로 로드(load)된다.

(보안에 문제가 있기 때문에 모르는 파일을 로드해서는 안된다.)


파이썬 with문을 사용하여 파일 처리 (파일 예외 처리)

try:
    f = open('file.txt', 'r')
    for s in f:
        print(s, end='')
except:
    print('여기서 예외처리를 합니다.')
finally:
    f.close()

파일 처리는 예상치 못한 오류가 언제든지 생길 수 있기 때문에 예외처리가 필요할 수도 있다.

파일 닫기(close)와 같은 마지막 정리 작업finally 블록해서 하는 것이 좋다.

파이썬 예외처리 사용법 정리 (Python Exception)


with open('file.txt', 'r') as f:
    for s in f:
        print(s, end='')

파이썬에서는 주로 with문을 사용하여 파일 처리를 한다.

with 블록을 벗어나면 자동으로 파일이 닫힌다. (자동 close)



반응형
댓글