Python 파일 읽고 쓰기

배추·2025년 11월 15일

🐍 Python

목록 보기
11/19

Python에서 파일을 통한 입출력 방법에 대해 알아봅니다.


▶︎파일 생성

  • 파일_객체 = open(파일_이름, 파일_열기_모드) : 프로그램을 실행한 디렉터리에 새로운 파일이 생성.
  • 파일 열기 모드
    • r: 읽기 모드 (파일을 읽기만 할 때)
    • w: 쓰기 모드 (파일에 내용을 쓸 때)
      • 해당 파일이 이미 존재할 경우: 원래 있던 내용이 모두 사라지고 새로운 파일이 생성.
      • 해당 파일이 존재하지 않으면: 새로운 파일이 생성.
    • a: 추가 모드 (파일의 마지막에 새로운 내용을 추가할 때)
  • 특정 디렉터리에 생성하고 싶다면 파일이름에 디렉터리까지 설정.
  • f.close(): 열려 있는 파일 객체를 닫는다.
    • 프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일의 객체를 자동으로 닫아 주기 때문에 생략 가능.
    • 하지만 close()를 사용해서 열려 있는 파일을 직접 닫아 주는 것이 좋다. 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문.
f = open("C:/doit/새파일.txt", 'w')
f.close()

▶︎파일을 쓰기 모드로 열어 내용 쓰기

f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()
  • f.write(data): 모니터 화면 대신 파일에 데이터를 적는 방법.
  • print(data): 모니터 화면에 데이터를 출력하는 방법.

▶︎파일을 읽는 방법

readline 함수

  • readline(): 파일의 첫 번째 줄을 읽음.
f = open("C:/doit/새파일.txt", 'r') # ‘새파일.txt’ 파일을 읽기 모드로 연 후
line = f.readline() # readline()을 사용해서 파일의 첫 번째 줄을 읽어 
print(line) # 출력
f.close()
  • 만약 모든 줄을 읽어 화면에 출력하고 싶다면 반복문 이용.
f = open("C:/doit/새파일.txt", 'r')
while True:
    line = f.readline()
    if not line: break # 더 이상 읽을 줄이 없으면 break
    print(line)
f.close()
  • readline()은 더 이상 읽을 줄이 없을 경우, 빈 문자열('')을 반환한다.

readlines 함수

  • readlines(): 파일의 모든 줄을 읽어서 각각의 줄을 요소로 가지는 리스트.
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines() # ["1번째 줄입니다.\n", "2번째 줄입니다.\n", ..., "10번째 줄입니다.\n"]
for line in lines:
    print(line)
f.close()
  • strip(): 파일을 읽을 때 줄 끝의 줄 바꿈(\n) 문자를 제거하고 사용해야 할 경우.
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    line = line.strip()  # 줄 끝의 줄 바꿈 문자를 제거한다.
    print(line)
f.close()
  • readline()은 더 이상 읽을 줄이 없을 경우, 빈 문자열('')을 반환한다.

read 함수

  • read(): 파일의 내용 전체를 문자열로 반환.
f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()

파일 객체를 for 문과 함께 사용

  • 파일 객체는 기본적으로 for 문과 함께 사용하여 파일을 줄 단위로 읽을 수 있다.
f = open("C:/doit/새파일.txt", 'r')
for line in f:
    print(line)
f.close()

▶︎파일에 새로운 내용 추가

  • 원래 있던 값을 유지하면서 단지 새로운 값만 추가해야 할 경우도 있다. 이런 경우에는 파일을 추가 모드('a')로 열면 된다.
f = open("C:/doit/새파일.txt",'a')
for i in range(11, 20):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()

▶︎with 문과 함께 사용

  • with: 파일을 열고 닫는 것을 자동으로 처리. with 블록(with 문에 속해 있는 문장)을 벗어나는 순간, 열린 파일 객체가 자동으로 닫힌다.
  • with 문 내에서 선언된 변수는 with 블록을 벗어난 후에도 접근할 수 있다.
with open("foo.txt", "w") as f:
    f.write("Life is too short, you need python")

▶︎스코프(Scope) 규칙

함수 스코프

  • 함수 안에서 선언된 변수는 함수 밖에서 접근할 수 없다.
def my_function():
    func_var = "함수 안의 변수"

my_function()
# print(func_var)  # 오류! 함수 밖에서는 접근 불가

블록 스코프

  • if, for, while, with 등의 블록 안에서 선언된 변수는 블록 밖에서도 접근할 수 있다.
# if 문 블록의 예
if True:
    if_var = "if 블록 안의 변수"

print(if_var)  # 정상 작동! "if 블록 안의 변수" 출력

# for 문 블록의 예  
for i in range(3):
    loop_var = "반복문 안의 변수"

print(i)         # 정상 작동! 2 출력
print(loop_var)  # 정상 작동! "반복문 안의 변수" 출력

# with 문에서 변수 사용 예제
with open("test.txt", "w") as f:
    content = "Hello, Python!"  # with 블록 내에서 변수 선언
    f.write(content)

print(content) # with 블록을 벗어난 후에도 변수에 접근 가능 # "Hello, Python!" 출력

▶︎파일 처리 시 주의사항

  • 한글이 포함된 파일을 다룰 때는 인코딩을 명시하는 것이 좋다.
  • 인코딩을 명시하지 않으면 운영체제마다 다른 기본 인코딩을 사용하여 한글이 깨질 수 있다.
# 한글 파일 쓰기
with open("한글파일.txt", "w", encoding="utf-8") as f:
    f.write("안녕하세요, 파이썬!")

# 한글 파일 읽기
with open("한글파일.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)
  • 인코딩(Encoding): 문자를 컴퓨터가 이해할 수 있는 숫자로 변환하는 방식.
    • 예) '가'라는 한글 문자를 어떤 숫자로 저장할지 정하는 규칙.
    • UTF-8: 전 세계 모든 문자(한글, 영어, 중국어, 일본어, 특수문자 등)를 표현할 수 있는 가장 널리 사용되는 인코딩 방식.
profile
난 🥬

0개의 댓글