프로그래밍/Python

[Python] 파일 활용 방법 (1) 파일 읽기

베린이 2023. 12. 18. 07:42
반응형

- 파일 처리에 활용하는 함수

  • open: 불러올 파일을 지정하고 읽기인지 쓰기인지 정함
  • read: 파일 전체 내용을 문자열로 읽어온다
  • readline: 하나의 줄만 읽어옴(txt)
  • readlines: 파일 전체 내용을 한 줄씩 리스트로 만들어줌(txt)
  • write: 파일에 씀
  • writelines: txt 파일에만 씀

 

open 함수를 통해 파일을 열 수 있습니다. input 되는 변수에 따라 모드를 지정할 수 있는데요, 변수는 다음과 같습니다.

  • r: 읽기, 생략 시 읽기가 기본 모드
  • w: 쓰기, 기존 파일이 있을 경우 덮어쓰기
  • r+: 읽기, 쓰기
  • a: 쓰기, 기존 파일이 있을 경우 이어서 쓰기
  • t: 텍스트 파일용
  • b: 바이너리 파일용

 

- 파일 읽기

그러면 예시를 통해 더 자세히 알아봅시다. 먼저 저는 D:\Download\Python에 data.txt라는 파일을 만들고 다음과 같이 입력하고 저장하도록 하겠습니다.

 

엄마가 섬그늘에
굴 따러 가면
아기가 혼자 남아
집을 보다가

 

그리고 다음과 같이 코드를 작성해서 실행해 봅시다.

#변수 선언
file = None
a = ""

#파일 불러오기
file = open("D:\Download\Python\data.txt","r",encoding="utf-8")

a = file.readline()
print(a)

>> 엄마가 섬그늘에
>>

 

먼저 변수가 선언되고 file 변수를 통해 텍스트 파일을 불러왔습니다. 읽기(r)로 불러왔고 인코딩 방식은 utf-8 방식으로 설정했습니다. 이게 무슨 말인지는 추후에 알아보도록 하겠습니다. 그리고 readline으로 한 줄을 읽어왔습니다. 그런데 print를 하니까 한 줄이 더 print가 되는데요, end를 사용해 이를 해결할 수 있습니다.

file = None
a = ""

file = open("D:\Download\Python\data.txt","r",encoding="utf-8")

a = file.readline()
print(a, end = "")

>> 엄마가 섬그늘에

 

위의 예시에서는 첫 번째 줄만 읽어왔는데요, 다 읽어오려면 어떻게 해야 할까요?? readline을 여러 번 하면 됩니다.

file = None
a = ""

file = open("D:\Download\Python\data.txt","r",encoding="utf-8")

a = file.readline()
print(a, end = "")

a = file.readline()
print(a, end = "")

a = file.readline()
print(a, end = "")

>> 엄마가 섬그늘에
>> 굴 따러 가면
>> 아기가 혼자 남아

 

그리고 open을 했다면, 코드 마지막에 close를 해줘야 합니다.

file = None
a = ""

file = open("D:\Download\Python\data.txt","r",encoding="utf-8")

a = file.readline()
print(a, end = "")

a = file.readline()
print(a, end = "")

a = file.readline()
print(a, end = "")

file.close()

 

다음으로는 readlines를 활용할 수 있습니다.

file = None
a = ""

file = open("D:\Download\Python\data.txt","r",encoding="utf-8")

a = file.readlines()
print(a)

file.close()

>> ['엄마가 섬그늘에\n', '굴 따러 가면\n', '아기가 혼자 남아\n', '집을 보다가']

 

readlines는 리스트로 저장되는 거니까 print 보기가 불편하네요, 코드를 다음과 같이 수정해 봅시다.

file = None
a = ""

file = open("D:\Download\Python\data.txt","r",encoding="utf-8")

a = file.readlines()

for i in a :
    print(i, end = "")

file.close()

>> 엄마가 섬그늘에
>> 굴 따러 가면
>> 아기가 혼자 남아
>> 집을 보다가

 

그런데 만약 지정된 경로에 파일이 없다면 어떻게 될까요?? 그럼 다음과 같은 오류가 출력됩니다.

Traceback (most recent call last):
  File "D:\Download\Python\00.py", line 4, in <module>
    file = open("D:\Download\Python\data1.txt","r",encoding="utf-8")
FileNotFoundError: [Errno 2] No such file or directory: 'D:\Download\Python\data1.txt'

 

이러면 굉장히 불편하니까 함수를 불러와서 문제를 해결해 봅시다. 이번에는 input을 활용해서 경로를 설정해 보도록 하겠습니다.

import os

#변수 선언
file = None
fileName, List, String = "", [], ""

fileName = input("경로 설정: ")

if os.path.exists(fileName) :
    file = open(fileName,"r",encoding="utf-8")
    List = file.readlines()

    for String in List :
        print(String, end = "")

    
    file.close()

else :
    print("해당 경로가 존재하지 않습니다")

>> 경로 설정: D:\Download\Python\data1.txt
>> 해당 경로가 존재하지 않습니다

 

os의 path.exists 함수를 활용해서 경로가 존재할 때만 파일을 불러와서 값을 읽고, 경로가 존재하지 않을 경우 경로가 없다고 알려주는 코드입니다.