프로그래밍을 하다 보면 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에 대해서 알아보았다.
-끝-
'Python' 카테고리의 다른 글
파이썬에서 모듈(module) 사용하기 (0) | 2024.06.29 |
---|---|
파이썬에서 클래스(class)를 다뤄보자. (0) | 2024.06.25 |
파이썬에서 함수를 다뤄보자 (0) | 2024.06.21 |
파이썬에서 반복문 while문과 for문 사용하기 (0) | 2024.06.20 |
파이썬에서 조건문 if 사용 방법 (0) | 2024.06.16 |