본문 바로가기

Python

Chapter 7 : Python - File Input / Output(encoding="utf8"), With


안녕하세요! 오늘도 프로그래밍 공부내용을 기록하고자 합니다.
이번에 배운 내용 : 파일 입출력, with문

파일 입출력

파일 입출력은 파이썬에서 파일을 읽거나 쓰는 기능을 말합니다.
이를 통해 텍스트 파일이나 바이너리 파일과 상호작용할 수 있습니다.

먼저 파일을 열기 위해 open() 함수를 사용합니다.
이 함수는 파일 경로와 함께 호출되며, 읽기 모드(r), 쓰기 모드(w),
이어쓰기 모드(a) 등 여러 가지 모드를 설정할 수 있습니다.

파일을 읽을 때는 read() 메서드를 사용합니다.
이 메서드는 파일의 내용 전체를 문자열로 반환합니다.
또는 readline() 메서드를 사용하여 파일의 한 줄씩 읽을 수도 있습니다.

파일에 쓸 때는 write() 메서드를 사용합니다.
이 메서드는 문자열을 파일에 작성합니다.
파일을 쓰기 모드로 열었을 때는
기존의 내용이 모두 삭제되고 새로운 내용으로 덮어씌워집니다.
이어쓰기 모드로 열었을 때는 파일의 끝에 내용을 추가합니다.
또한 파일을 다 사용한 후에는 close() 메서드를 호출하여 파일을 닫아야 합니다.
아래의 예제를 확인해봅시다.

# 파일 읽기
file = open('파일경로', 'r')
content = file.read()
print(content)
file.close()

# 파일 쓰기
file = open('파일경로', 'w')
file.write('파일에 쓸 내용')
file.close()


# 파일에 데이터 저장하기(쓰기모드)
data_file = open("data.txt", "w", encoding="utf8")
data_file.write("이름: 홍길동\n")
data_file.write("나이: 30\n")
data_file.write("성별: 남성\n")
data_file.write("직업: 개발자\n")
data_file.close()

# 추가 데이터 저장하기(이어쓰기모드)
data_file = open("data.txt", "a", encoding="utf8")
data_file.write("주소: 서울시 강남구\n")
data_file.close()

# 저장된 데이터 출력하기(읽기모드)
data_file = open("data.txt", "r", encoding="utf8")
line = data_file.readline()
while line:
    print(line, end="")
    line = data_file.readline()
data_file.close()


위의 예제 코드는 "data.txt" 파일을 생성하고,
데이터를 파일에 저장한 뒤, 데이터를 또 다시 추가 저장하고
다시 파일을 열어서 저장된 데이터를 출력하는 예제입니다.

먼저, 파일을 열 때는 파일명과 모드를 지정해야 합니다.
“data.txt"라는 이름으로 파일명을 지정했고
"w" 는 파일을 쓰기 모드로 열어서 내용을 덮어쓰는 것을 의미합니다.
"a" 는 파일에 내용을 이어서 작성하는 것을 의미합니다.
("w" 가 기존 내용이 모두 삭제되고 덮어쓰기가 된다고 했었죠?
그 전 내용을 삭제하지 않고 이어쓰기 위해 사용됩니다.)
"r" 는 파일을 읽기 모드로 열어서 내용을 읽을 수 있습니다.

   읽기모드 예제를 보면 "data.txt" 파일을 읽기 모드로 열고,
저장된 데이터를 한 줄씩 읽어와서 출력합니다.
readline() 함수를 사용하여 파일에서 한 줄씩 읽어오고,
반복문 while을 사용하여 읽어온 줄이 빈 문자열이 아닐 때까지 출력합니다.
print() 함수의 end="" 부분은 출력 후에
줄바꿈 문자가 추가되지 않도록 설정한 것입니다.

결론적으로 위의 예제 코드는 "data.txt" 파일에
이름, 나이, 성별, 직업과 같은 데이터를 저장한 뒤,
주소 데이터를 추가 작성하고 해당 데이터를 출력합니다.

예제코드 출력결과

encoding="utf8" 은 무엇인가?


그런데 open() 메서드 안에 들어있는 저 encoding="utf8"은 뭘까요?
encoding="utf8"은 파일에 쓰거나 읽을 때,
사용할 인코딩 방식을 설정하는 부분입니다.

인코딩컴퓨터가 문자를 이진 데이터로 변환하는 과정을 말합니다.
다양한 언어와 문자 체계가 있기 때문에, 텍스트를 파일에 저장하거나
파일에서 읽을 때 어떤 인코딩 방식을 사용해야 하는지 명시해야 합니다.

UTF-8은 유니코드를 나타내는 가장 일반적인 인코딩 방식 중 하나입니다.
UTF-8은 대부분의 언어와 문자 체계를 지원하며,
다국어 텍스트를 효율적으로 저장할 수 있습니다.
따라서 encoding="utf8"을 사용하여 파일을 UTF-8 인코딩 방식으로 열면,
다양한 문자를 제대로 처리할 수 있습니다.

만약 파일을 다른 인코딩 방식으로 열고 싶다면,
encoding 매개변수에 해당 인코딩 방식을 지정하면 됩니다.
예를 들어, encoding="cp949"는 한국어 인코딩인
CP949를 사용하여 파일을 열 수 있습니다.
하지만 대부분의 경우에는 UTF-8을 사용하는 것이 권장됩니다.

간단히 말해, encoding="utf8" 은 파일 입출력 시
사용할 인코딩 방식을 설정하는 부분이며,
UTF-8은 다양한 언어와 문자 체계를 지원하는 인코딩 방식 중 하나입니다.

encoding="utf8"을 명시적으로 지정하지 않는다면?


만약 encoding="utf8"을 명시적으로 지정하지 않는다면,
파일 입출력에는 기본 인코딩 방식이 사용됩니다.
기본 인코딩 방식은 운영 체제와 설정에 따라 다를 수 있습니다.

예를 들어, 대부분의 운영 체제에서는 기본적으로 UTF-8을 사용하며,
이 경우에는 명시적으로 encoding="utf8"을 지정하지 않아도
정상적으로 동작할 것입니다.

그러나 운영 체제나 설정에 따라 기본 인코딩 방식이 다를 수 있기 때문에,
코드를 다른 환경에서 실행할 때 문제가 발생할 수 있습니다.
특히 다국어 텍스트를 다룰 때는
UTF-8을 명시적으로 지정하는 것이 좋습니다.
UTF-8은 대부분의 언어와 문자 체계를 지원하며,
데이터의 일관성과 호환성을 보장할 수 있습니다.

따라서, encoding="utf8"을 명시하는 것은
파일 입출력에서 인코딩 방식을 명확히 지정하여
데이터의 정확성과 호환성을 보장하기 위한 좋은 습관입니다.


with문


아까 위에서 언급했듯이 파일을 다 사용한 후에는
close() 메서드를 호출하여 파일을 닫아야 합니다.
그러나 이러한 번거로움을 피하기 위해 with 문을 사용할 수도 있습니다.
with 문을 사용하면 파일을 열고 닫는 과정을 자동으로 처리해줍니다.

with open('파일이름.txt', 'r') as file:
    contents = file.read()
    print(contents)


위의 예제 코드는 with문을 사용하여
파일을 열고 읽는 과정을 보여줍니다:
위의 코드에서 '파일이름.txt'는 읽고자 하는 파일의 이름입니다.
as file파일 객체를 file이라는 변수에 할당한다는 의미입니다.
with문을 사용하면 파일을 열고 작업을 수행한 후,
자동으로 파일을 닫아줍니다.
이는 파일을 열었을 때 꼭 닫지 않아도 되므로
편리하고 안전한 방법입니다.

파일을 읽는 예제 코드에서는 open()함수를 사용하여 파일을 열고,
read() 메서드를 사용하여 파일 내용을 읽어옵니다.
그리고 print() 함수를 사용하여 파일 내용을 출력합니다.

이렇게 with문을 사용하면 파일 입출력 과정에서
코드가 간결하고 안전해집니다.




오늘은 파이썬의 파일 입출력과 with구문을 다루어 보았습니다.
코드를 실행하면 파일이 생성되고 출력된다는게
너무 신기하고 재밌더라구요 ㅎ
다음 내용들도 기대하며 오늘은 여기까지로 마무리하겠습니다:)

출처 : https://youtu.be/kWiCuklohdY
필자는 해당 링크 영상을 통해 학습하였으나,
포스팅 내용 및 설명은 영상과 다를 수 있음을 알립니다.