-
[Python] 텍스트 파일 읽고 쓰기(open, readlines 등)코딩/파이썬 2023. 7. 30. 10:29반응형
파이썬을 사용하다보면 텍스트 파일을 읽고 저장해야할 때가 많습니다. Python은 텍스트 파일을 다루는 방법이 매우 직관적이며, 유연성이 있습니다. 본 포스트에서는 Python에서 파일을 다루는 방법을 중점적으로 다루어보겠습니다. 실제 파일 생성부터 읽고 쓰는 방법까지 전반적인 과정을 알아보며, 각 단계에 따른 코드 예제도 함께 제공할 예정입니다.
목차
- 1. Python에서 파일 다루기
- 2. 파일 생성 방법 : open, close
- 3. 파일 읽는 방법 : readlines, read
- 4. with 문으로 파일 읽기
- 5. 파일에 한 줄씩 덧붙이는 방법
- 6. 텍스트 파일 읽을 때, 인코딩 처리 방법
1. Python에서 파일 다루기
Python은 텍스트 파일을 다루는 방법이 매우 직관적이며, 유연성이 있습니다. 본 포스트에서는 Python에서 파일을 다루는 방법을 중점적으로 다루어보겠습니다. 실제 파일 생성부터 읽고 쓰는 방법까지 전반적인 과정을 알아보며, 각 단계에 따른 코드 예제도 함께 제공할 예정입니다.
2. 파일 생성 방법: open, close
먼저, 파일을 생성해봅시다. Python에서는 'open' 함수를 이용하여 새 파일을 생성하거나 기존 파일을 열 수 있습니다. 다음과 같이 사용할 수 있습니다.
f = open('myfile.txt', 'w') # file 열기/생성하기 f.close() # 파일 닫기
위 코드는 'myfile.txt'라는 파일을 쓰기 모드('w')로 열어줍니다. 만약 파일이 존재하지 않으면 새로 생성하게 됩니다. 이렇게 열린 파일은 반드시 'close' 메소드를 이용해 닫아주어야 합니다.
아래는 python 공식 문서에 정의된 open 함수의 형식입니다.
# open 함수 형식 open(file, mode='r', encoding=None) # file명, 오픈형식, 인코딩방식
위는 자주 사용하는 파라메타 만 정의했지만, 공식 문서에는 다양한 추가 파라메타에 대한 설명을 확인할 수 있습니다.
https://docs.python.org/ko/3/library/functions.html#open
여기서 중요한 것이 파일 열기 모드인데요. 파일 열기 모드에는 다양한 옵션이 있습니다.
문자 의미 'r' 읽기용으로 엽니다 (기본값) 'w' 쓰기용으로 엽니다. 'x' 독점적인 파일 만들기용으로 엽니다, 이미 존재하는 경우에는 실패합니다. 'a' open for writing, appending to the end of file if it exists 'b' 바이너리 모드. 바이너리 형식의 파일을 다룰때 사용합니다. 't' 텍스트 모드 (기본값) '+' 갱신(읽기 및 쓰기)용으로 엽니다
3. 파일 쓰는 방법: write
'write' 메소드는 Python에서 파일에 문자열을 쓰기 위해 사용되는 함수입니다. 'write' 메소드를 사용하려면 먼저 'open' 함수를 사용하여 쓰기 모드('w') 또는 추가 모드('a')로 파일을 열어야 합니다.
다음은 'write' 메소드를 사용하는 간단한 예시입니다:# 쓰기 모드로 파일을 열고 텍스트를 씁니다. f = open('myfile.txt', 'w') f.write('Hello, Python!') f.close()
위의 코드는 'myfile.txt'라는 이름의 파일을 쓰기 모드로 열고, 'Hello, Python!'이라는 문자열을 파일에 쓴 후 파일을 닫습니다. 만약 'myfile.txt'라는 이름의 파일이 이미 있으면 이 파일의 내용은 삭제되고 새로운 내용이 씌어집니다. 파일이 존재하지 않으면 새 파일이 생성됩니다.
만약 기존의 파일 내용에 더하여 새로운 내용을 쓰고 싶다면, 파일을 열 때 'a'(append) 모드를 사용하면 됩니다:
# 추가 모드로 파일을 열고 텍스트를 씁니다. f = open('myfile.txt', 'a') f.write('\nWelcome to Python tutorial.') f.close()
위의 코드는 'myfile.txt'라는 이름의 파일을 추가 모드로 열고, '\nWelcome to Python tutorial.'이라는 문자열을 기존 파일의 내용 뒤에 추가한 후 파일을 닫습니다.
4. 파일 읽는 방법: readlines, read
파일을 open 메소드를 이용해 파일 객체를 얻었다면, 'read', 'readlines', 'readline' 등의 메소드를 사용하여 파일을 다양한 방식으로 읽을 수 있습니다.
read
'f.read()' 함수는 파일의 모든 내용을 하나의 문자열로 반환합니다.
f = open('myfile.txt', 'r') data = f.read() print(data) f.close()
아래의 실행결과를 보면 하나의 문자열로 반환됨을 알 수 있습니다.
readlines
반면 'f.readlines()' 함수는 파일의 모든 내용을 한 줄씩 분리하여 리스트로 반환합니다.
f = open('myfile.txt', 'r') lines = f.readlines() print(lines) f.close()
아래가 실행결과 입니다.
for문에서 한 줄씩 읽기
파일 사이즈가 클 경우에는, 한 번에 읽는것 보다 for문에서 한 줄씩 처리하는게 좋습니다.
아래와 같이 for 문을 사용하면 파일의 각 줄을 차례로 처리할 수 있습니다.f = open('myfile.txt', 'r') for line in f: print(line.strip()) # 줄바꿈 제거 f.close()
5. with문으로 파일 읽기
파일을 열었을 때는 반드시 나중에 닫아줘야 하는데, 이 과정을 깜빡하고 넘어가기 쉽습니다. 그런데 만약 파일을 닫지 않고 두면 어떤 문제가 발생할까요? 운영체제는 한 번에 열 수 있는 파일의 수에 제한을 두고 있습니다. 그래서 많은 파일을 열어두면, 새로운 파일을 열 수 없게 되는 문제가 발생할 수 있습니다. 또한, 열린 파일은 시스템 리소스를 차지하기 때문에 성능에 영향을 줄 수 있습니다.
이러한 문제를 방지하기 위해, Python에서는 'with'문을 제공합니다. 'with'문을 사용하면, 파일을 열고 작업을 수행한 후 자동으로 파일을 닫아줍니다. 이는 프로그래머가 파일을 닫는 것을 잊어버리는 실수를 방지해줍니다.
'with'문을 사용하는 방법은 다음과 같습니다:with open('myfile.txt', 'r') as f: content = f.read() # with문에서는 f.close 를 호출하지 않아도 됩니다.
위의 코드에서 'myfile.txt' 파일을 열어서 모든 내용을 읽은 후에, 'with' 블록을 벗어나는 순간 자동으로 파일을 닫습니다. 이렇게 하면 'f.close()'를 명시적으로 호출하지 않아도 되므로 코드를 더 깔끔하게 유지할 수 있습니다. 또한, 파일을 닫는 것을 잊어버리는 실수를 방지할 수 있어 안전성도 높아집니다.
따라서 가능한 경우 'with'문을 사용하여 파일을 열고 닫는 것을 권장합니다.5. 파일에 한 줄씩 덧붙이는 방법
파일에 새로운 내용을 추가하려면, 'open' 함수에서 파일을 열 때 'a' (append) 모드를 사용하면 됩니다. 이렇게 하면 파일의 기존 내용 끝에 새로운 내용을 추가할 수 있습니다.
# 'a'옵션을 주어 append 모드로 파일을 엽니다. with open('myfile.txt', 'a') as f: f.write("\nThis is a new line") # 마지막 줄에 추가됩니다.
위 코드를 실행하면 myfile.txt 에 새로운 내용("This is a new file")이 추가됨을 확인할 수 있습니다.
6. 텍스트 파일 읽을 때, 인코딩 처리 방법
파일을 읽거나 쓸 때는 인코딩 문제가 발생할 수 있습니다. Python에서는 이를 처리하기 위해 'encoding' 매개변수를 제공합니다. 일반적으로 UTF-8 인코딩을 많이 사용하며, 윈도우에서는 CP949도 많이 사용합니다.
# encoding을 utf-8로 강제 지정합니다. with open('myfile.txt', 'r', encoding='utf-8') as f: data = f.read() print(data)
만약 encoding이 안 맞으면 아래와 같이 오류가 발생할 수 있습니다. 이 경우 적절한 인코딩을 찾아 옵션에 입력해야 합니다.
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 2: invalid start byte
마무리
이상 Python에서 파일 입출력하는 방법에 대해 다뤄보았습니다.
https://smart-worker.tistory.com/50
https://smart-worker.tistory.com/47
https://smart-worker.tistory.com/48
반응형'코딩 > 파이썬' 카테고리의 다른 글
Python의 예외 처리 방법: try, except, finally 이해하기 (0) 2023.07.30 [Python] JSON 데이터 손쉽게 다루기 (0) 2023.07.30 [Python] GIL(Global interpreter Lock) 이해하기 (0) 2023.07.29 [Python]람다(lambda) 함수 이해하기 (0) 2023.07.29 [Python] 리스트와 튜플(tuple)의 차이점 이해하기 (0) 2023.07.29