Python/Python 기초

[Python] 파일 다루기

죵욜이 2024. 12. 1. 16:58

파일 열기  open() 

file = open("파일경로", "모드")
  • 파일경로는 절대경로 또는 상대경로 로 전달해야함
  • 절대경로 : 파일의 정확한 위치를 지정 ex)  C:/Users/username/Documents/example.txt 
  • 상대경로 : 현재 작업 디렉토리를 기준으로 경로를 지정 ex)  example.txt 
  • '모드'기본값은  'r'  (읽기모드), 생략가능

파일모드 종류

  •  'r'  : 읽기 모드 (파일이 없으면 오류 발생)
  •  'w'  : 쓰기 모드 (파일이 없으면 새로 생성, 기존 파일 덮어씀)
  •  'a'  : 추가 모드 (파일 끝에 데이터를 추가)
  •  'b'  : 바이너리 모드 (이미지, 오디오 파일 등)
  •  'x'  : 파일이 이미 존재하면 오류 발생 (파일이 없을 때만 생성)
file = open('example.txt', 'r')  # 텍스트 파일 읽기 (상대경로)
file = open('C:/Users/username/Documents/example.txt', 'w')  # 텍스트 파일 쓰기 (절대경로)

파일 닫기  close() 

  • 파일을 다 사용한후 반드시 파일을 닫아야한다.
  • 파일을 닫아야 제대로 저장되고, 시스템 리소스를 해제할 수 있다.
file = open("example.txt", "r")  # 읽기 모드로 파일 열기
# 파일 처리 작업 수행
file.close()  # 파일 닫기

 

자동으로 파일 닫기 ( with )

  •  with  구문이 끝나면 자동으로  file.close()  가 호출되어 닫히게 된다.
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

파일 읽기

  •  read()  : 파일 전체 내용을 읽어 문자열로 반환
  •  readline()  : 한 줄씩 읽어서 문자열로 반환
  •  readlines()  : 파일의 모든 줄을 리스트로 반환
with open("example.txt", "r") as file:
    lines = file.readlines()
    for line in lines:
        print(line.strip())  # 각 줄의 공백을 제거하고 출력

위 코드가 주로 쓰이는 방식


파일 쓰기

  •  write()  : 문자열을 파일에 작성
  •  writelines()  : 여러 줄을 파일에 한 번에 작성 (리스트나 튜플 등)
  • 파일을 열때  w (쓰기모드) 또는  a (추가모드) 로 열어야 함
# 파일에 내용 쓰기
file = open('example.txt', 'w')
file.write('Hello, World!')  # 문자열 작성
file.close()

# 여러 줄을 파일에 쓰기
lines = ['Hello, World!\n', 'Welcome to Python.\n']
file = open('example.txt', 'w')
file.writelines(lines)
file.close()

예외 처리

파일을 처리하는 동안 오류가 발생할 수 있다.

예외 처리를 통해 파일이 존재하지 않거나, 접근 권한이 없는 경우를 대비해야 한다.

try:
    with open("example.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
except IOError:
    print("파일을 읽는 중 오류가 발생했습니다.")

 


열고자하는 파일의 경로를 모를땐?

 os  모듈을 활용해 파이썬 코드로 경로를 찾을수 있다.

 

현재 작업 디렉토리 확인하기 ( os.getcwd )

import os

current_directory = os.getcwd()
print("현재 작업 디렉토리 :", current_directory)

# 현재 작업 디렉토리 : C:/Users/.../.../....

 

절대 경로 찾기 ( os.path.abspath )

import os

absolute_path = os.path.abspath('example.txt')
print("파일의 절대 경로 :", absolute_path)

# 파일의 정대 경로 : C:/Users/.../.../example.txt

 


TroubleShooting - encoding

파일을 열려고하는데

 

UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 0: illegal multibyte sequence

 

이런 에러가 나왔다.

 

Windows 환경에서 한글을 지원하는 인코딩 방식으로 주로 사용하는것이  cp949  라고 하는데

 

주피터에서도 파일을 open 하니

 

 

 encoding='cp949'  로 연것을 볼수있다.

 

 

하지만 메모장파일을 저장하려고하면

 

 UTF-8  로 인코딩되기 때문에 서로 맞지않아서 오류가 날 수도 있는것이다.

 

이럴땐

f = open("prac1.txt", "r", encoding='UTF-8')

이런식으로 인코딩방식도 넣어주면된다.