Python

파이썬에서 파일을 읽고 써보자(Read/Write)

총알 2024. 6. 22. 15:15
728x90

프로그래밍을 하다 보면 db에서 데이터를 가져오거나 입력을 하는 것과 같이 파일에 read, write를 하는 경우가 있다.

파이썬에서도 간단한 방법으로 파일을 읽고 쓸 수 있다.

아래 예시들을 참고하여 파일을 일고 써보도록 하자.

 

파일을 읽기 위해서는 open함수를 사용해야 하는데 open함수에서 지원하는 모드는 아래 표를 참고하도록 하자.

  입력 모드 설명
읽기(Read) r 파일을 read할 때 사용한다.
쓰기(Write) w 파일을 write 할 때 사용한다.
(기존에 쓰여있는 데이터가 있다면 삭제됨)
추가(Add) a 파일을 write 할 때 사용한다.
(기존에 write 되어있는 데이터가 유지되고 이어서 Write 할 수 있다.)

 

open("파일명",'파일 모드') - 파일 open 함수
file = open("To do list.txt",'w')
file.close

파일을 생성하는 방법은 입력모드에 w로 입력하면 되고 open 하고 더 작업할 내용이 없다면 close로 마무리해주면 된다.

 

예제와 같이 파일을 생성하면 위와 같이 파일이 생성된 것을 확인할 수 있다.

 

아래와 같이 파일 경로를 입력할 수도 있는데, 디렉토리 폴더가 구성되어 있으면 해당경로에 파일이 생성된다.

file = open("D:/0.Work/file_read_write/plan/To do list plan.txt",'w')
#file = open("D:\\0.Work\\file_read_write\\plan\\To do list plan.txt",'w')
file.close

파일 경로의 경우 첫번째 행에 있는 방식을 사용해도 되고, 두 번째 행에 있는 방식을 사용해도 된다.

/를 사용할 경우에는 한번만 써도 되지만 \를 사용할 경우에는 두 번 사용해야 한다. 그 이유는 \n, \r과 같은 이스케이프 코드와 혼돈이 있을 수 있기 때문에 \는 두 번을 사용해야 한다.

어찌 되었든 예제 코드와 같이 코드를 작성하면 위와 같이 원하는 경로에 파일이 생성된 것을 확인할 수 있다.

 

다만 해당 디렉터리가 없을 경우에는 아래와 같이 에러를 출력한다.

file = open("D:/0.Work/file_read_write/plan/To do list plan.txt",'w')
file.close

################출력 결과################
Traceback (most recent call last):
  File "d:\0.Work\file_read_write\file_RW.py", line 1, in <module>
    file = open("D:/0.Work/file_read_write/plan/To do list plan.txt",'w')
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'D:/0.Work/file_read_write/plan/To do list plan.txt'

 

그럼 여기서 우리는 파일의 위치를 확인할 수 있는 디렉터리가 없을 경우에는 디렉터리를 생성해야 하는데 디렉터리를 생성할 수 있는 함수가 있는지 의문을 가져야 한다. 당연히 디렉터리를 생성해 주는 함수는 있다!

 

os.makedirs("파일명") - 디렉토리(새폴더) 생성
import os

os.makedirs("D:/0.Work/file_read_write/plan")
#os.makedirs("plan")
file = open("D:/0.Work/file_read_write/plan/To do list plan.txt",'w')
file.close

파일경로는 위의 예제와 같이 os.makedirs를 통해서 생성할 수 있다.

다만 os module을 import 해줘야 하는데 이는 나중에 모듈에 대해서 공부할 때 자세한 설명을 하겠지만, 짧게 설명을 하자면 클래스, 함수, 변수 등을 모아놓은 파이썬 파일이라고 보면 된다.

 

그럼 이어서 파일에 데이터를 write 하는 방법을 알아보자.

 

파일명.write(데이터)
file = open("To do list.txt",'w')
data = """World travel
sky diving
snorkeling
etc...
"""
file.write(data)
file.close

파일에 데이터를 write 하는 방법은 간단하다.

write함수에서 인자값으로 데이터를 입력해 주면 된다.

 

그럼 위와 같이 데이터가 잘 입력된 것을 확인할 수 있다.

다음으로 파일을 read 하는 방법을 알아보자.
파일명.read()
file = open("To do list.txt",'r')

data = file.read()
print(data)

file.close

################출력 결과################
World travel
sky diving
snorkeling
etc...

우선 open 함수를 이용할 때 r모드로 open 해야 하며

read 함수를 이용하면 위와 같이 데이터를 읽어올 수 있는 것을 확인할 수 있다.

 

파일명.readlines()
file = open("To do list.txt",'r')

data = file.readlines()
print(data)
print(data[0])

file.close

################출력 결과################
['World travel\n', 'sky diving\n', 'snorkeling\n', 'etc...\n']
World travel

read는 라인별로 리스트 형식으로 출력하도록 할 수도 있다.

readlines 함수를 이용하면 라인에 따라 리스트로 저장할 수도 있고, 원하는 리스트의 요소를 출력할 수도 있다.

 

파일명.write(데이터) -> 모드만 a로 변경
file = open("To do list.txt",'a')

data = """travel universe
time travel
"""
file.write(data)

file.close

처음에 소개했던 write 함수와 사용 방법은 동일하고

모드를 a로 설정하고 write함수를 사용하면 마지막 라인에 데이터가 추가되는 방식이다.

 

open 함수에서 a 모드로 입력 후 write 함수로 데이터를 write 해주면 위와 같이 데이터가 입력된 것을 확인할 수 있다.

 

이어서 파일 편집을 하는 방법에 대해서 알아보자.
file = open("To do list.txt",'r')

data = file.readlines()
data_size = len(data)
cnt = 0
delete_index = 0

new_data =''

while cnt < data_size:
    if data[cnt] == "etc...\n":
        delete_index = cnt
    cnt += 1

del data[delete_index]
data.append("\nthat's all!")

file = open("To do list.txt",'w')

data_size = len(data)
cnt = 0

while cnt < data_size:
    new_data += data[cnt]
    cnt += 1
file.write(new_data)

file.close

txt파일의 중간 내용을 수정하는 함수에 대해서는 찾아보았는데 중간 내용을 수정하는 함수는 찾을 수 없었다.

그래서 보통 사용하는 방법은 위와 같이 파일을 읽어서 원하는 부분만 수정한 뒤에 파일을 다시 write 하는 방식을 많이 사용하는 것 같았다. 그리 복잡한 소스코드는 아니라 설명은 따로 없어도 이해할 수 있을 거라 생각된다.

 

위에서 작성한 소스코드는 중간의 etc... 을 제거하고 마지막에 that's all!!! 을 추가하는 소스 코드인데

원하는 대로 txt파일이 수정된 것을 확인할 수 있다.

 

마지막으로 with 문과 사용하는 파일 read/write에 대해서 알아보자.
with open(파일명, 모드) as 함수명:
data = "Today is Saturday!"

with open("To do list.txt",'w') as file:
    file.write(data)

위와 같이 with를 활용해서 파일 open을 하게 되면 굳이 close를 하지 않아도 with문을 벗어나면 자동으로 파일이 close 된다. 그래서 위와 같이 소스코드를 짜게 되면 어디부터 파일 read/write 부분인지 쉽게 볼 수 있어서 더 가독성이 좋아진다.

 

여기까지 파일 read/write에 대해서 알아보았다.

-끝-

728x90