Advertisement
  1. Code
  2. Python

파이썬을 이용한 파일 처리

Scroll to top
Read Time: 4 min

() translation by (you can also view the original English article)

데스크톱의 바탕화면을 보면 보면 무엇을 볼 수 있나요? 파일이 곳곳에 널려 있습니다. 그렇지 않나요? 저도 제가 이처럼 바탕화면을 어지럽히는 나쁜 습관에 정기적으로 빠진다는 것을 알고 있지만 여기서 핵심은 우리가 파일을 많이 다룬다는 것입니다.

파이썬에 대해 말하자면 파이썬을 이용해 파일을 처리하는 것이 가능하며, 이것이 바로 이번 튜토리얼에서 보여드리고자 하는 내용입니다.

파일 열기

어떤 파일에 대한 작업을 수행하기 위해 가장 먼저 해야 할 자연스러운 프로세스는 파일을 여는 것입니다. 먼저 Text.txt를 내려받습니다. 이 파일은 실험을 수행하는 데 사용할 파일입니다.

파이썬을 이용해 파일을 열려면 open() 함수를 사용합니다. 파이썬 문서에는 다음과 같이 언급돼 있습니다.

open()은 파일 객체를 반환하며, 가장 일반적으로 두 개의 인수와 함께 사용됩니다: open(filename, mode)

예제를 살펴보기에 앞서 위에서 언급한 바와 같이 open() 함수는 filenamemode라는 두 개의 인수를 받습니다. 인수를 설정하는 이 방법은 stdio(즉, C 언어의)의 fopen()과 실제로 비슷합니다. filename은 열려고 하는 파일의 이름입니다. 지정한 파일이 현재 디렉터리에 없는 경우 해당 파일에 대한 경로를 제공할 수도 있습니다. mode는 파일을 어떻게 열 것인지를 나타내는 문자열 값입니다. 다른 모드의 예를 다음 표에서 확인할 수 있습니다.

모드 설명
r 파일을 읽기 모드로 엽니다. 스트림은 파일의 시작 부분에 위치합니다.
r+ 파일을 읽기 및 쓰기 모드로 엽니다. 스트림은 파일의 시작 부분에 위치합니다.
w 파일의 길이를 0으로 줄이거나 쓰기 모드로 텍스트 파일을 만듭니다. 스트림은 파일의 시작 부분에 위치합니다.
w+ 파일을 읽기 및 쓰기 모드로 엽니다. 파일이 없으면 파일이 생성되고 파일이 존재하면 기존 파일의 내용을 지웁니다. 스트림은 파일의 시작 부분에 위치합니다.
a 파일을 쓰기 모드로 엽니다. 파일이 없으면 생성됩니다. 스트림은 파일의 끝에 위치합니다. 파일에 대한 쓰기는 항상 현재 파일의 끝에서 일어납니다.
a+ 파일을 읽기 및 쓰기 모드로 엽니다. 파일이 없으면 생성됩니다. 스트림은 파일의 끝에 위치합니다. 파일에 대한 쓰기는 항상 현재 파일의 끝에서 일어납니다.

다른 모드에 대해서는 파이썬 문서에서 확인할 수 있습니다.

이제 Text.txt 텍스트 파일을 열어보겠습니다. 이것은 다음과 같이 한 줄로 간단히 수행할 수 있습니다.

text_file = open('Text.txt')

여기서 볼 수 있듯이 mode를 지정하지 않았습니다. open()에 사용되는 기본 모드를 알고 싶을 경우 print text_file을 입력하면 다음과 같이 출력될 것입니다.

<open file 'Text.txt', mode 'r' at 0x10728c810>

보다시피 기본 모드는 r입니다. 현 시점에서는 아무 일도 일어나지 않을 수도 있지만 이 단계에서 파일을 여는 작업을 수행했습니다.

파일 읽기

파일은 비밀상자와도 같습니다. 이전 단계에서 파일을 열었고, 이제 파일 안에 무엇이 들어있는지 보고 싶습니다. 파이썬에서 파일을 읽는 것은 간단하며, 다음과 같이 read() 메서드를 사용해 수행할 수 있습니다.

text_file.read()

이전 문장의 출력 결과를 보려면 print text_file.read()를 입력합니다. 이 경우 비밀(내용)이 공개됩니다!

I'm enjoying learning about "file handling" in Python

계속해서 print text_file.read()를 다시 한 번 입력하면 어떻게 되나요? 문자열이 출력되는 것을 볼 수 있습니다. 그 이유는 한 번에 한 줄씩 읽는(예: readline()) 것과는 달리 이미 전체 파일을 읽었기 때문입니다 .

파일에 쓰기

이미 읽은 파일에 다른 문장이나 단락을 추가(쓰기)하고 싶을 수 있습니다. and I'm looking for more라는 문장을 추가하고 싶다고 해봅시다. 파이썬에서는 다음과 같이 write() 메서드를 이용하면 됩니다.

text_file.write('and I\'m looking for more')

앗, 그런데 오류가 발생했습니다.

1
Traceback (most recent call last):
2
  File "test.py", line 2, in <module>
3
    text_file.write(' and I\'m looking for more')
4
IOError: File not open for writing

무엇이 문제인지 알아내셨나요? 첫 번째 절에서 파일을 열 때 open('Text.txt')과 같이 열었다는 것을 기억하십니까? 이 예제에서는 mode를 지정하지 않았으므로 모드(기본)가 r로 설정됐습니다. 이렇게 하면 파일을 읽을 수 있게 되지만 이 예제에서는 파일에 쓰려고 합니다. 그럼 파일을 다시 열되 이번에는 w 모드로 파일에 써봅시다.

text_file = open('Text.txt', 'w')

이제 위 코드를 이용해 문장을 다시 써봅시다. 어떻게 됐나요? 처음 두 부분에 나온 것과 같이 파일을 open()해서 print read()를 수행해서 파일의 내용을 확인해 봅시다.

1
text_file = open('Text.txt','r')
2
print text_file.read()

이 스크립트의 출력 결과는 다음과 같습니다.

and I'm looking for more

여러분은 I'm enjoying learning about "file handling" in Python라는 원래 문장과 함께 이 새로운 문장이 나타날 것이라고 예상했을 겁니다. 그렇지 않나요? 그럼 원래 문장은 어디로 사라졌을까요? w 모드는 현재 쓰고 있는 파일의 내용을 덮어쓰는 듯합니다. 문서의 원본 텍스트를 유지하고 싶다면 a(append) 모드를 사용하면 됩니다.

1
text_file = open('Text.txt','a')
2
text_file.write(' and I\'m looking for more')

이 경우 Text.txt에 기대했던 내용이 들어있을 것입니다.

I'm enjoying learning about "file handling" in Python and I'm looking for more

그럼 지금까지 배운 내용을 모두 정리해 봅시다.

1
with open('Text.txt', 'r+') as text_file:
2
    print 'The file content BEFORE writing content:'
3
    print text_file.read()
4
    text_file.write(' and I\'m looking for more')
5
    print 'The file content AFTER writing content:'
6
    text_file.seek(0)
7
    print text_file.read()

위 코드에는 새로운 것들이 있습니다. 그것들을 간략하게 살펴보겠습니다. with ...as는 파일을 열어서 처리한 후 파일을 확실히 닫을 수 있게 해줍니다. 한편으로 seek()는 포인터(즉, 커서)를 파일의 다른 부분으로 옮길 수 있게 합니다. 예를 들어, seek(0)은 포인터가 파일이 시작되는 부분을 가리키게 합니다.

스크립트를 실행해서 출력되는 결과를 확인해 봅시다.

파일 닫기

파일을 읽거나 쓴 다음에는 파일을 닫는 습관을 들여야 메모리를 비울 수 있습니다. 스크립트가 끝난 후 파이썬이 자동으로 파일을 닫기는 파일 닫기를 미리 하지 않으면 열려 있는 파일이 파이썬이 이용할 수 있는 공간을 차지할 것입니다. 파일을 닫을 때는 단순히 close() 메서드를 사용하기만 하면 됩니다.

다음 예제를 봅시다.

1
text_file = open('Text.txt','a+')
2
print text_file.read()
3
text_file.write(' and I\'m looking for more')

read() 후에 파일을 닫으면 어떻게 될까요? 다시 말해, text_file.close()를 실행하면 어떻게 될까요? 파이썬은 다음과 같은 예외를 발생시킵니다.

1
Traceback (most recent call last):
2
  File "test.py", line 4, in <module>
3
    text_file.write(' and I\'m looking for more')
4
ValueError: I/O operation on closed file

따라서 닫힌 파일은 읽거나 쓸 수 없다는 결론을 얻을 수 있습니다.

결론

이번 튜토리얼의 내용은 여기까지입니다. 여기서는 앞에서 보여드린 몇 가지 기본 작업을 통해 파이썬이 파일 작업을 얼마나 손쉽게 만들어주는지 살펴봤습니다.

보통 여러분은 파이썬을 이용해 다른 어떤 파일 작업을 수행하시나요?

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.