08 파일 읽기, 쓰기
2020년02월18일08 파일 읽기, 쓰기
파일 읽기, 쓰기
파일 읽고 쓰기를 통해서 텍스트에서 내용을 가져와 활용할 수도 있고, 엑셀이나 csv같은 파일을 갖고 와 가공하여 정보로 사용할 수 있다. 파이썬에서는 세 가지의 모드가 있다.
- 읽기 모드 r - 파일 읽기만 할 때 사용
- 쓰기 모드 w - 파일 내용 쓸 때, 다시 작성하면 기존 파일 삭제
- 추가 모드 a - 파일 내용 쓸 때, w와 달리 밑에 내용이 추가됨
예제1 - 파일 읽기
파일을 읽고 쓸 때는 open 함수를 사용하여 제어한다.
첫 번째 인자에는 제어할 파일경로/파일명
을 두 번째는 모드에 대해 지정한다.
f = open('./resource/review.txt', 'r') # 절대경로와 읽기모드
content = f.read()
print(content)
print(dir(f))
# 반드시 close 리소스 반환해야한다.
f.close()
read()함수는 전체 문장을 읽어서 표시한다. 그리고 읽고 나서는 리소스를 꼭 반환해야해서 close()를 호출해준다.
예제2
close 항상 하기 귀찮고 잊을 수 있기에 with문을 써서 자동 반환해줄 수 있다!
with open('./resource/review.txt', 'r') as f:
c = f.read()
print(c)
print(list(c)) # 문자열이기에 list로 형변환 해줄 수 있다.
print(iter(c)) # 리스트는 iterable기에 iter를 호출해볼 수 있다.
예제3
open함수도 아마 iterable 객체로 주는지, for문으로 순회 가능하다.
with open('./resource/review.txt', 'r') as f:
for c in f:
print(c.strip())
예제4
읽고, 쓰기에서는 커서라는 개념도 있는데, 우리가 흔히 말하는 마우스 커서같이 위치를 알려주는 개념이라 생각하면 될거 같다. read()함수를 사용하면 전체를 다 읽기에, 커서가 문서 끝으로 가기 때문에 한 번 더 read()함수를 호출해도 이미 문서 끝이기에 아무 내용이 없다.
with open('./resource/review.txt', 'r') as f:
content = f.read()
print(">", content)
# 한 번 읽으면 커서가 끝으로 가서 출력이 안됨
content = f.read() # 내용이 없음
print(">", content)
####예제5
한 문장씩 처리
read()함수를 사용하면 전체를 읽기 때문에, 한 문장씩 제어가 위해서는 readline()함수를 이용할 수 있다.
with open('./resource/review.txt', 'r') as f:
line = f.readline()
# print(line)
while line: # NULL될때까지
print(line, end='###')
line = f.readline()
예제6
readlines()를 이용하면 문장을 리스트 형태로 저장해서 좀 더 편하게 순회할 수 있다.
with open('./resource/review.txt', 'r') as f:
contents = f.readlines() # 리스트 형태로 저장
print(contents)
for c in contents:
print(c, end=' ****** ')
예제7
score = []
with open('./resource/score.txt', 'r') as f:
for line in f:
score.append(int(line))
print(score)
print('average : {:6.3}'.format(sum(score)/len(score)))
# 여섯 자리, 소수점 세자리까
파일 쓰기
파일을 읽어봤으면, 쓰기도 해봐야 하는법! 마찬가지로 open함수를 쓰는데 두 번째 인자로 ‘w’, ‘a’를 사용하면 된다.
with open('./resource/text1.txt', 'w') as f:
f.write('Niceman!\n')
with open('./resource/text1.txt', 'a') as f:
f.write('Goodman!\n')
‘w’로 호출하면, 만약 기존 파일에 내용이 있으면 전부 삭제되고 새로운 내용이 추가되고, ‘a’로 호출하면 그 다음 줄에 추가된다. 상황에 따라 적절한 옵션을 넣어주면 된다.
예제8
랜덤한 숫자를 넣어보는 예제이다.
from random import randint
with open('./resource/text2.txt', 'w') as f:
for cnt in range(6):
f.write(str(randint(1, 50)))
f.write('\n')
예제9
writelines()를 통해 리스트를 통째로 넣을 수 있다.
# wrtielines : 리스트 -> 파일로 저장
with open('./resource/text3.txt', 'w') as f:
list = ['Kim\n','Park\n','Hong\n']
f.writelines(list)
예제10
print() 함수를 통해서도, 내용을 집어넣을 수 있다.
# 프린트 문 활용
with open('./resource/text4.txt', 'w') as f:
print("test Contents1!", file=f)
print("test Contents12", file=f)