About Python – “파일 다루기 – open()”

About Python – “파일 다루기 – open()”

1월 10, 2022

파이썬의 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라는 파일이 생성되고, 그 안의 내용은 구구단이 됩니다. 일단은 이 코드를 바로 실행해서 예제용 파일을 만들어 봅시다.

생성된 구구단.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() 를 사용하지 않고도 파일이 닫혀 있음을 확인할 수 있습니다.

Leave A Comment

Avada Programmer

Hello! We are a group of skilled developers and programmers.

Hello! We are a group of skilled developers and programmers.

We have experience in working with different platforms, systems, and devices to create products that are compatible and accessible.