파일을 조작하는 것은 중요한 일이다.
역시 파이썬에서는 아주 쉽게 파일을 조작할 수 있는 방법을 제공한다.
아래의 예제는 순식간에 파일을 생성한다.
file = open('HelloFile.txt','w')
file.write('Time is short you need Python.')
file.close()
내장함수(builtins.py)에서 open 메소드를 기본으로 제공하기 때문이다. file을 열고 <class '_io.TextIOWrapper'> 를 리턴한다. 인자에서 'w'는 write 의 약자이다. 쓰기 모드이다.
여러번 실행해도 결과는 같다. 만약 파일이 없다면 새로 생성되고 텍스트 내용을 바꿔 저장해도 다시 지우고 생성된다. 파일쓰기가 끝나면 항상 close 해준다. 안 그러면 메모리에 남아서 시스템의 자원을 쓸데없이 차지한다.
파일을 다루는 절차는 항상 같다.
먼저 파일을 열고 file.open()
파일에 조작한 후 file.write() or read()
파일 객체를 닫는다. file.close()
다음은 읽기 모드를 사용해 본다.
file = open('readingknowhow.txt','r')
str = file.read()
print(str)
print(len(str))
file.close()
인터넷에서 다운로드 받은 txt문서로 테스트를 해본다.
파일을 열때 'r' read 읽기 모드를 사용했다. file.read() 로 문자열에 저장하고 콘솔에 출력했다. 파일의 길이(문자열)를 세어보니 6272이다.
단순한 스트링이기 때문에 다음의 소스코드로도 같은 결과를 얻을 수 있다. iterable 방식을 사용한다. 텍스트의 공백과 새로운 줄 라인들도 출력 되는 것에 주의한다.
file = open('readingknowhow.txt','r')
str = file.read()
for i in str:
print(i,end='')
file.close()
with as 구문 사용하기
with open('readingknowhow.txt','r') as file:
str = file.read()
print(str)
with as 구문을 사용하면 file.close를 하지 않아도 된다. 자동으로 호출된다. 코드가 간결해지고 exception 처리에 유리하다.
*텍스트 파일에 구구단 출력하기
with open('newFile.txt','w') as file:
for i in range(2,10):
for j in range(1,10):
file.writelines(f"{i} x {j} = {i*j}\n")
file.writelines("---------------------------\n")
이 소스코드는 파일에 구구단을 출력한다. 개행문자 \n을 사용하여 양식을 맞춰준다.
파일 끝에 내용 추가하기
a (add) 모드로 파일을 열고 쓴다. w 모드로 쓰면 기존의 내용은 다 지워지니 주의한다.
with open('newFile.txt','a') as file:
file.write('\nend of file')
*파일 한줄씩 읽고 출력하기
with open('readingknowhow.txt','r') as f:
line = None
while line != '':
line = f.readline()
print(line.strip('\n'))
input()
input 내장함수를 사용하면 출력하는 속도를 조절할 수 있다. 키보드 한번 입력에 한줄이 넘어간다.
동일한 내용이다. 파일객체도 iterable 이다.
with open('readingknowhow.txt','r') as f:
for line in f:
print(line.strip('\n'))
input()
파일을 오픈할 때의 모드는 아래와 같다.