나의 공부 일기

Python) FILE I/O(파일 입출력) 본문

파이썬/파이썬 정리

Python) FILE I/O(파일 입출력)

곽병권 2023. 10. 17. 17:36
728x90

우리는 파이썬으로 파일 입력과 출력도 할 수 있습니다.

 

FILE I/O 에서 I 는 input 으로 외부에서 프로그램으로 데이터가 들어오는것을 말합니다.

O는 반대로 프로그램에서 데이터가 외부로 나가는것을 말합니다.

 

이런식으로 이루어져 있습니다.

 

 

FILE을 생성할때에는 파이썬 내장 함수인 open을 이용하여 파일을 생성합니다.

file = open("test.txt", "w")  

file.close()

 

위에 코드는 test.txt라는 파일을 없으면 생성하고 있으면 그 파일을 작성하는 형식으로 연다는 뜻입니다.

파일을 사용한 후에는 file.close()를 이용하여 파일을 꼭 닫아주셔야 합니다.

 

파일 열기모드는 3개로 나뉩니다.

r : 읽기모드

w : 쓰기모드

a : 추가모드

입니다.

 

파일을 생성할때 한글을 입력하면 이상한 문자들이 나오면 글자가 깨질수도 있는데

이때 뒤에 file = open("test.txt", "w" ,encoding="UTF-8") 이렇게 붙여준다면 글자가 깨지지 않도록 해줍니다.

 

기본적인 파일 생성후 데이터 입력 방식입니다.

file = open("test.txt", "w", encoding='UTF-8')

for i in range(1, 11):
    data = "%d출력.\n" % i
    file.write(data)
    print(data, end='')

file.close()

파일에 내가 원하는 결과물을 넣으려면 변수를 만들어 file.write() 이 괄호 안에 넣어줘야 합니다.

저 코드를 실행하면 이런 텍스트 파일이 만들어지게 됩니다.

파일을 열어 확인하시면 제가 넣었던 데이터인

1출력. ~ 10출력. 이 줄바꿈하여 들어가있은걸 볼 수 있습니다.

 

 

맽 오른쪽 밑에 보이는 UTF-8 이게 바로 인코딩(encording)방식입니다. 

이 인코딩을 맞춰줘야지만 글자가 깨지지 않고 나타나게 됩니다.

 

 

파일을 읽을때는 아까 r 을 사용하여 읽어드린다고 했는데,

이 r 에는 관련 함수가 또 따로 있습니다.

 

readline()이라는 내가 작성한 파일을 한줄 읽는 함수가 있습니다.

 

readline()을 이용하여  파일 내에 있는 모든 데이터를 읽어 올 수도 있습니다.

파일이 없으면 마지막에 none을 반환합니다.

사용할때 꼭 반복문을 사용하여 none이 될 경우 그만 출력하도록 탈출구를 생성해놔야 합니다.

 

readlines()라는 파일내의 모든 데이터를 리스트 형식으로 반환하는 함수도 있습니다.

 

마지막으로 read()라는 파일로부터 모든 줄을 읽어주는 함수도 있습니다.

데이터를 모두 읽어 문자열로 반환해줍니다.

 

 

기본적인 파일을 한줄 읽어드리는(readline()) 입니다.

file = open("test.txt", "r", encoding='UTF-8')

read_data = file.readline()
print(read_data)

file.close()

---결과---
1출력.

아까 작성했던 파일의 맨 윗줄인 1출력. 이 나오게 됩니다. 

 

 

 

readline()을 이용하여 파일의 모든 데이터를 읽어오는 코드입니다.

file = open("test.txt", "r", encoding='UTF-8')

while True:
    read_data = file.readline()
    if not read_data:
        break
    print(read_data, end='')

file.close()

# ---결과---
1출력.
2출력.
3출력.
4출력.
5출력.
6출력.
7출력.
8출력.
9출력.
10출력.

 

 

readlines()을 이용하여 모든 데이터를 출력하는 코드입니다.

file = open("test.txt", "r", encoding='UTF-8')
read_data = file.readlines()

for i in read_data :
    print(i, end='')

file.close()

# ---결과---
1출력.
2출력.
3출력.
4출력.
5출력.
6출력.
7출력.
8출력.
9출력.
10출력.

 

read()를 이요하여 모든 데이터 출력

file = open("test.txt", "r", encoding='UTF-8')
read_data = file.read()
print(read_data)

file.close()

# ---결과---
1출력.
2출력.
3출력.
4출력.
5출력.
6출력.
7출력.
8출력.
9출력.
10출력.

 

 


 

이제 파일을 추가해주는(업데이트 해주는) a 에 대해 정리해보겠습니다.

 

file = open("test.txt", "a", encoding='UTF-8')

for i in range(1, 11):
    data = "%d추가 출력.\n" % i
    file.write(data)
    print(data, end='')

file.close()

 

w 와 거의 유사하게 작성을 하면 코드가 돌아가는데, 이 코드를 실행하면 기존에 있던 텍스트 파일에

데이터가 추가로 들어가져있을겁니다.

확인해보면 이렇게 기존에 10출력. 에서 밑으로 데이터가 추가된것을 볼 수 있습니다.

 


 

마지막으로 파일 입출력 방식에 다른 방법도 있습니다.

지금까지는 file = open("test.txt", "a", encoding='UTF-8')

이런식으로 파일이라는 변수에 담아 사용하고 마지막에 file.close()를 꼭 해줘야 했더라면

 

with를 이용하여 파일을 열고 블록이 끝나면 file.close() 를 따로 입력하지 않아도

자동으로 파일을 닫아주는 방법도 있습니다. 

 

with open("test.txt","w",encoding="UTF-8") as file :
    data = "출력데이터!"
    file.write(data)
    print(data,end="")

이런식으로 작성해주면 앞에서 파일이 생성하고 데이터가 들어간것처럼

test.txt라는 파일에 "출력데이터!" 라는 데이터가 들어가 있는것을 볼 수 있습니다.

 

with를 사용하실때 주의할점은 블록을 탈출하면 오류가 날 수 있다는것입니다.

with open("test.txt", "w", encoding="UTF-8") as file:
    data = "출력데이터!"
    file.write(data)
    print(data, end="")
file.write('추가데이터 ')
---결과---
ValueError: I/O operation on closed file.

 

 


여기까지 파일 입출력에 대해 정리해보았습니다.

728x90