About Python – “파일 다루기 – open()”
About Python – “파일 다루기 – open()”
파이썬의 open()
함수
Open file and return a stream. Raise OSError upon failure.
파일을 열고 스트림 객체를 반환합니다. 실패 시, OSError를 반환합니다.
doc1 = open("test.txt", 'w') # open(파일이름, 모드) 로 사용
doc1.write("HELLO, WORLD!") # doc1 객체에 "HELLO, WORLD!" 를 작성
doc1.close() # 파일 닫기
위의 코드를 실행하면 open()
함수에 의해서 "test.txt"
라는 파일이 만들어지고, 그것은 "w"
모드로 열리게 됩니다.
실제로 실행한 디렉토리에 test.txt
가 생성되었고 그 내용 또한 원하던 대로 작성된 것을 볼 수 있습니다. 파일 열기 모드를 정리해 본다면 다음과 같습니다.
‘r’ – open for reading (default) -> 읽기를 위해 파일을 엽니다. 기본값으로 사용됩니다.
‘w’ – open for writing, truncating the file first -> 쓰기를 위해 파일을 엽니다. 이미 존재한다면, 모든 내용을 잘라냅니다.
‘x’ – create a new file and open it for writing -> 새 파일을 만들고, 쓰기를 위해 파일을 엽니다. 파일이 이미 존재한다면 오류를 냅니다.
‘a’ – open for writing, appending to the end of the file if it exists -> 파일의 마지막에 내용을 추가하기 위해서 파일을 엽니다.
‘b’ – binary mode -> 바이너리 모드 – (텍스트 파일이 아닌 컴퓨터 파일)을 다루기 위해 사용합니다.
‘t’ – text mode (default) ->텍스트 파일을 다루기 위해 사용하고, 기본값으로 사용됩니다.
파이썬의 read()
, readline()
, readlines()
함수
doc1 = open("구구단.txt", 'w')
for i in range(2, 10):
for j in range(1, 10):
gugudan_data = "{}*{} = {}".format(i, j, i*j)
doc1.write(gugudan_data + '\n')
doc1.close()
위의 코드를 실행하면 구구단.txt
라는 파일이 생성되고, 그 안의 내용은 구구단이 됩니다. 일단은 이 코드를 바로 실행해서 예제용 파일을 만들어 봅시다.
파이썬의 read()
함수
read()
함수는 파일의 내용 전체를 문자열로 돌려주는 함수입니다.
doc1 = open("구구단.txt", 'r')
data = doc1.read()
print(data) # 구구단.txt의 모든 내용
print(type(data)) # <class 'str'>
doc1.close()
전에 작성했던 코드를 모두 지우고 위의 코드를 작성후 실행해 봅시다. data
에 예전에 작성했던 구구단.txt
의 내용이 모두 저장된 것을 볼 수 있습니다. 마지막 줄의 코드에서는 타입을 확인해 봤는데, 문자열 타입인 것 또한 확인할 수 있습니다.
파이썬의 readline()
함수
doc1 = open("구구단.txt", 'r')
line = doc1.readline() # 한 줄을 읽어들입니다.
line2 = doc1.readline()
line3 = doc1.readline()
print(line)
print(line2)
print(line3)
doc1.close()
# 2*1 = 2
#
# 2*2 = 4
#
# 2*3 = 6
위의 코드를 실행해보면 readline()
함수에 의해서 한 줄씩을 문자열로 반환합니다. 출력 결과를 보면 한 줄씩 띄어진 상태로 나온 것을 볼 수 있는데요, 문자열 끝에 있는 \n
도 같이 출력되어서인 것으로 보입니다.
파이썬의 readlines()
함수
readlines()
함수는 파일의 모든 줄들을 리스트로 반환합니다.
doc1 = open("구구단.txt", 'r')
lines = doc1.readlines()
print(lines)
print(type(lines))
doc1.close()
# ['2*1 = 2\n', '2*2 = 4\n', '2*3 = 6\n', '2*4 = 8\n', ...] 모든 줄을 리스트로 반환
# <class 'list'>
위의 코드를 실행해 보면 알 수 있습니다. lines
에 리스트 객체가 담겼습니다. type()
로 타입을 확인해 보면 리스트 자료형이라는 것을 알려주고 있습니다.
파이썬의 with
문
바로 위의 코드에 파일이 닫혀 있는지, 열려 있는지를 확인할 수 있는 코드를 몇 줄 추가해보겠습니다.
doc1 = open("구구단.txt", 'r')
lines = doc1.readlines()
print(lines)
print(type(lines))
if doc1.closed:
print("파일 닫힘")
else:
print("파일 열림")
doc1.close()
if doc1.closed:
print("파일 닫힘")
else:
print("파일 열림")
# 파일 열림
# 파일 닫힘
open()
을 사용 후에는 "파일 열림"
이, closed()
를 사용 후에는 "파일 닫힘"
이 출력됩니다.
그런데, with
문을 사용하면 파일 열고 닫기를 파이썬에서 자동으로 해 줍니다.
with open("구구단.txt", 'r') as doc1:
#with open()함수 사용 as 파일객체: 로 사용합니다.
lines = doc1.readlines() # 들여쓰기를 해야 합니다.
print(lines)
print(type(lines))
if doc1.closed:
print("파일 닫힘")
else:
print("파일 열림")
if doc1.closed:
print("파일 닫힘")
else:
print("파일 열림")
위의 코드에서는 파일을 열고 닫는 과정이 달라졌습니다. with
문 블록을 벗어나기 전에는 파일이 열려 있음을, with
문 블록을 벗어난 후에는 close()
를 사용하지 않고도 파일이 닫혀 있음을 확인할 수 있습니다.