2 minute read

들어가면서

MNIST 같이 Import 하여 쓸 수 있는 파일들이 있는반면 대부분은 커스텀된 파일들을 다루게 됩니다. 이럴때 파일을 읽어오고 수정하는 방법에 대해 알아보겠습니다.


파일 생성하기

다음 아래와 같은 코드를 실행해보면 프로그램을 실행한 디렉토리에 새로운 파일이 하나 생성된 것을 확인할 수 있습니다.

f = open("연습.txt", 'w')
f.close()

짜잔~

파일을 생성하기 위해 파이썬 내장 함수 Open을 사용했습니다.

open 함수는 “파일 이름” 과 “파일 열기 모드” 를 입력값으로 받습니다.

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

파일 열기 모드에는 다음과 같이 세가지가 있습니다.

파일을 쓰기모드로 열면 해당 파일이 이미 존재할 경우 원래 있던 내용은 모두 사라지고, 해당 파일이 없으면 새로운 파일이 생성된다.

이제 만든 파일을 /users/yuchul 디렉토리에 생성하고 싶다면

f = open("/users/yuchul/연습.txt", 'w')
f.close()

위 코드처럼 경로를 / 를 이용해서 작성해주면 됩니다.

\ 역슬래시로도 경로를 설정할 수는 있으나 두번씩 사용해야하고, \n 을 줄바꿈으로 인식하기 때문에 사용하지 않도록 합시다 :)

아래쪽에 연습.txt 가 잘 만들어진 것을 보실 수 있습니다.

f.close() 는 열려있는 파일 객체를 닫아주는 역할을 합니다. 프로그램이 종료될때 파이썬 프로그램이 자동으로 닫아주기는 하지만 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문에 버릇처럼 사용하면 좋을 것 같습니다.

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

위에서는 열기만 했지, 써보지는 않았으므로 이제 직접 작성해보는 시간을 가져보도록 합시다.

f = open("/users/yuchul/연습.txt", 'w')
for i in range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()

잘 작성된 모습을 보실 수 있습니다.

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

파이썬에는 외부 파일을 읽어 들여 프로그램에서 사용할 수 있는 여러가지 방법이 있습니다. 이번에는 그 방법을 자세히 알아봅시다.

readline 함수 이용하기

f = open("/users/yuchul/연습.txt", 'r')
line = f.readline()
print(line)
f.close()

위 코드는 f.open("연습.txt", 'r') 로 파일을 읽기 모드로 연 후 readline()을 사용해서 파일의 첫 번째 줄을 읽어 출력하는 경우입니다.

1번째 줄입니다.

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

f = open("/users/yuchul/연습.txt", 'r')
while True:
    line = f.readline()
    if not line: break
    print(line)
f.close()

무한루프 while True: 안에서 f.readline() 을 사용해 파일을 계속해서 한줄씩 읽어들이고, 만약 더 이상 읽을 줄이 없으면 break를 이용하여 반복문을 탈출합니다.

한 줄씩 읽어 출력할 때 줄 끝에는 \n 문자가 있어서 빈 줄도 같이 출력됩니다.


readlines 함수 사용하기

import numpy as np

f = open("/users/yuchul/연습.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
f.close()

print(type(lines))
lines1 = np.array(lines)
print(lines1.shape)
lines[0][1]
1번째 줄입니다.

2번째 줄입니다.

3번째 줄입니다.

4번째 줄입니다.

5번째 줄입니다.

6번째 줄입니다.

7번째 줄입니다.

8번째 줄입니다.

9번째 줄입니다.

10번째 줄입니다.

<class 'list'>
(10,)

''

readlines 함수는 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트를 돌려줍니다.

위 코드에서 알 수 있듯이, 리스트의 생긴 형태를 알아보기위해 numpy를 import해서 배열로 바꾸어주었습니다. 형태는 (10,) 이고 첫번째 리스트의 두번째 요소를 출력해보았더니 예상대로 ‘번’ 이 출력된 것을 보실 수 있습니다.

특정 문자 제거하기

파일을 읽어올 때, 공백이나 특정 문자를 제거하고 사용해야할 경우들이 있습니다. 이럴 때는 strip 함수를 사용합니다.

f = open("/users/yuchul/연습.txt", 'r')
lines = f.readlines()
for line in lines:
    line = line.strip()
    print(line)
f.close()

위 코드 같은 경우는 줄 끝의 줄 바꿈 문자를 제거합니다.

read 함수 사용하기

f = open("/users/yuchul/연습.txt", 'r')
data = f.read()
print(data)
f.close()

f.read() 는 파일의 내용 전체를 문자열로 돌려줍니다.

파일에 새로운 내용 추가하기

쓰기 모드(‘w’)로 파일을 열면 기존에 파일이 존재할 경우, 내용이 지워진다고 하였었습니다. 그렇다면 원래 있는 내용은 유지하되 새로운 값만 추가하고 싶으면 어떻게 하면 될까요?

이럴 때는 추가 모드(‘a’) 로 열면 됩니다.

f = open("/users/yuchul/연습.txt", 'w')
for i in range(11, 20):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()

출력해보면 11번째부터 19번째까지 추가된 것을 보실 수 있습니다.

with문과 함께 사용하기

지금까지 우리는 f = open(~~), f.close() 처럼 항상 열고 닫았어야 했습니다.

이를 열고 닫는 것을 자동으로 처리할 수 있는 기능이 바로 with입니다.

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

위와 같이 with문을 사용하면 with 블록을 벗어나는 순간 열린 파일 객체 f가 자동으로 닫혀서 편리합니다.

끝!

Leave a comment