매일 업데이트
2022-10-19 05:32 8 min

파이썬에서 파일을 처리하는 방법

프로그래밍 언어 전반에서 파일 처리는 핵심적인 요소입니다. 파이썬은 다양한 모드를 통해 파일 읽기, 쓰기 등의 작업을 지원합니다.

본 튜토리얼을 마치면 다음과 같은 능력을 갖추게 됩니다:

  • 파이썬에서 파일 열고 읽기
  • 텍스트 파일에서 행 단위로 읽어들이기
  • 파일에 쓰기 및 내용 추가하기
  • 컨텍스트 관리자를 활용하여 파일 작업 처리

파이썬에서 파일 읽는 방법

파이썬에서 파일을 열 때는 open('파일_이름', '모드') 구문을 사용합니다.

  • 여기서 '파일_이름'은 여러분이 열고자 하는 파일의 이름입니다.

주의: 만약 파일이 현재 작업 디렉토리에 있다면, 파일 이름만으로 충분합니다. 다른 폴더에 있다면 전체 파일 경로를 명시해야 합니다.

  • '모드' 매개변수는 파일을 어떤 방식으로 열 것인지 지정합니다.

기본적인 파일 열기 모드는 읽기 모드이며, 'r' 문자로 표현됩니다. 그러나 가급적이면 모드를 명시적으로 지정하는 것이 좋습니다.

시작하기 전에 예제에서 활용할 'lib.txt' 파일의 내용을 먼저 확인해 보겠습니다.

📁 본 튜토리얼에 사용된 텍스트 파일과 코드는 GitHub 저장소에서 다운로드할 수 있습니다.

다음 코드는 파이썬의 open() 함수를 사용하여 'lib.txt' 파일을 열고 그 내용을 읽는 방법을 보여줍니다.

file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()

# 출력
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels
  

위 예제에서,

  • open() 함수는 파일 객체를 반환하며, 여기서는 'file'이라고 명명했습니다.
  • 그 다음 read() 메서드를 호출하여 파일 내용을 읽어옵니다.
  • 이제 'contents' 변수에는 파일 내용이 담기게 되며, 이를 출력합니다.
  • 마지막으로 close() 메서드를 사용하여 파일을 닫습니다.

파일을 닫는 것을 잊으면 리소스 낭비로 이어질 수 있습니다. 많은 파일을 다룰 경우, 열어놓고 닫지 않은 파일들 때문에 상당한 메모리 사용량이 발생할 수 있습니다.

이제 닫기 작업을 자동으로 처리해주는 컨텍스트 관리자를 이용하여 파일을 열고 다루는 더 효율적인 방법을 알아보겠습니다. 다음 코드는 그 사용법을 보여줍니다.

with open('lib.txt','r') as f:
  contents = f.read()
  print(contents)
  

컨텍스트 관리자를 사용하면 close() 메서드를 명시적으로 호출할 필요가 없습니다. I/O 작업이 완료되면 파일은 자동으로 닫힙니다.

파이썬에서 파일에서 줄 단위로 읽는 방법

예제 텍스트 파일은 몇 줄 밖에 되지 않았기에 파일 전체 내용을 한 번에 읽는 데 문제가 없었습니다.

그러나 대용량 파일을 처리해야 할 경우, read() 메서드를 위처럼 사용하는 것은 비효율적일 수 있습니다.

텍스트 파일 크기가 매우 크면 메모리 부족 문제가 발생할 수 있습니다. 따라서 텍스트 파일에서 행 단위로 읽는 방법을 알아두면 좋습니다. 다음 섹션에서 그 방법을 살펴봅니다.

파이썬의 readline() 메서드를 사용해 줄 단위로 읽기

readline() 메서드는 파일에서 한 번에 한 줄씩 읽어옵니다.

다음 코드를 실행해 보겠습니다.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  line = f.readline()
  print(line)

# 출력
Hello, there!

Here are a few helpful Python libraries:
  

첫 번째 readline() 메서드 호출 후 파일의 첫 번째 줄이 출력되는 것을 확인할 수 있습니다. 두 번째 호출은 파일의 두 번째 줄을 반환합니다.

이는 첫 번째 호출 후 파일 포인터가 두 번째 줄의 시작 부분으로 이동했기 때문입니다.

파이썬에서는 tell() 메서드를 사용하여 현재 파일 포인터 위치를 얻을 수 있습니다. 또한 seek() 메서드로 파일 포인터를 특정 위치로 옮길 수 있습니다.

다음 코드 조각에서는 첫 번째 메서드 호출 후 f.seek(0)을 사용합니다. 이렇게 하면 파일 포인터가 텍스트 파일의 시작 부분으로 다시 이동하므로, 두 번 모두 파일의 첫 번째 줄이 출력됩니다.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  f.seek(0)
  line = f.readline()
  print(line)

# 출력
Hello, there!

Hello, there!
  

파이썬의 readlines() 메서드를 사용해 줄 단위로 읽기

readlines()라는 관련된 다른 메서드도 있습니다.

다음 코드를 실행하면 readlines() 메서드가 파일의 모든 줄을 담은 리스트를 반환하는 것을 알 수 있습니다.

with open('lib.txt','r') as f:
  lines = f.readlines()
  print(lines)

# 출력
['Hello, there!n', 'Here are a few helpful Python libraries:n',
'1) NumPyn', '2) pandasn', '3) matplotlibn',
'4) seabornn', '5) scikit-learnn', '6) BeautifulSoupn',
'7) Scrapyn', '8) nltkn', '9) Bokehn', '10) statsmodelsn', 'n']
  

파이썬의 for 루프를 사용하여 파일에서 줄 단위로 읽기

텍스트 파일에서 줄을 읽을 때는 for 루프를 사용할 수도 있습니다.

파일 객체가 있으면 for 루프를 이용해 파일 내용을 반복하며 한 번에 한 줄씩 출력할 수 있습니다. 이 방법은 파일 전체 내용을 읽어들이는 것이 아니라 한 번에 한 줄에만 접근한다는 점을 주목해야 합니다.

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

주의: 파이썬의 print() 함수를 사용할 때, 기본 구분자는 줄바꿈 문자 'n'입니다. 그러나 원본 파일에는 줄바꿈 문자가 없습니다. 따라서 원본 파일 내용 그대로 출력하려면 구분자 인수를 빈 문자열인 end = ""로 설정해야 합니다.

파이썬에서 파일 내용을 청크 단위로 읽는 방법

파이썬에서는 파일 내용을 작은 청크 단위로 나누어 읽을 수도 있습니다.

다음 코드를 살펴봅시다.

  • 여기서 chunk_size를 50으로 설정합니다. 이는 파일의 처음 50개 문자가 읽혀지고 출력된다는 의미입니다.
  • 이제 파일 객체 f에 대해 tell() 메서드를 호출하면, 파일 포인터가 예상대로 51번째 위치에 있는 것을 알 수 있습니다.
chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk)
  current = f.tell()
  print(f"Current position of file pointer: {current}")

# 출력
Hello, there!
Here are a few helpful Python librar
Current position of file pointer: 51
  

이 기술을 사용하여 파일 전체를 작은 청크 단위로 읽을 수도 있습니다.

다음 코드는 그 방법을 보여줍니다.

chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk,end='')

  while(len(chunk)>0):
    chunk = f.read(chunk_size)
    print(chunk,end='')

# 출력
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels
  

여기서는 파일 내용을 읽기 위해 while 루프를 사용합니다. 파일의 끝에 도달할 때까지 50 크기의 청크 단위로 파일 내용을 읽습니다. ✅

파이썬에서 파일에 쓰는 방법

파이썬에서 텍스트 파일에 내용을 쓰려면 파일을 쓰기 모드인 'w'로 열어야 합니다.

다음 코드가 그 방법을 보여줍니다.

with open('new_file.txt','w') as f:
  f.write('Hello, Python!')
  

작업 디렉토리 안에 'new_file.txt' 파일이 생성된 것을 확인할 수 있습니다.

이제 위 코드를 다시 한번 실행해 봅시다.

터미널에서 다음 명령을 실행합니다:

cat new_file.txt

# 출력: Hello, Python!
  

파일에 두 번 작성했으므로, "Hello, Python!"이 두 번 출력되어야 할 것 같지만 그렇지 않습니다.

이는 쓰기('w') 모드로 파일을 열 때, 기본적으로 파일 내용이 새 내용으로 덮어쓰기 되기 때문입니다.

기존 내용을 덮어쓰지 않고 파일 끝에 내용을 추가하려면, 추가 모드로 파일을 열어야 합니다. 다음 섹션에서 그 방법을 알아보겠습니다.

파이썬에서 파일에 내용 추가하는 방법

덮어쓰지 않고 파일에 내용을 추가하려면, 추가 모드로 파일을 엽니다.

추가 모드는 'a' 문자로 명시적으로 지정합니다.

이제 다음 코드를 두 번 실행해 봅시다.

with open('new_file.txt','a') as f:
  f.write('Hello, Python!')
  

이제 파일에 추가했으므로 텍스트가 두 번 출력되는 것을 볼 수 있습니다.

cat new_file.txt

# 출력: Hello, Python!Hello, Python!
  

결론

본 튜토리얼에서 학습한 내용을 빠르게 정리해 보겠습니다.

  • 파일 읽기, 쓰기, 추가와 같은 일반적인 파일 I/O 작업을 배웠습니다.
  • seek() 메서드를 사용하여 파일 포인터를 특정 위치로 이동하는 방법을 알아보았습니다.
  • tell() 메서드를 사용하여 파일 포인터의 현재 위치를 확인하는 방법도 배웠습니다.

본 튜토리얼이 도움이 되었기를 바랍니다. 이제 파이썬에서 텍스트 파일을 다루는 방법을 배웠으니, 다음으로 파이썬에서 JSON 파일을 다루는 방법도 배워보시기 바랍니다.

관련 자료:

파이썬에서 리스트 길이를 확인하는 3가지 방법

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.