Programming/Pyhton

파이썬: 파일 입출력, with문

JunsuKim 2022. 8. 1.
728x90

파일 생성하기

파일을 생성하는 방법 파이썬의 내장 함수인 open을 사용하는 것이다.

f = open("파일명.txt", '파일 열기 모드')

파일 열기 모드의 종류를 알아보자.

파일열기모드 설명
r 읽기 모드 - 파일을 읽기만 할 때 사용한다.
w 쓰기 모드 - 파일에 내용을 쓸 때 사용한다.
a 추가 모드 - 파일의 마지막에 새로운 내용을 추가할 때 사용한다.

파일을 쓰기 모드로 열 때,

해당 파일이 존재하지 않으면 새로운 파일이 생성되고, 이미 존재하는 파일이라면 기존의 내용은 전부 삭제된 후, 처음부터 쓰게 된다.

 

만약 파일을 C:/user 디렉터리에 생성하고 싶다면 다음과 같이 하면 된다.

f = open("C:/user/파일명.txt", '파일읽기모드')

close()

close 함수는 열려 있는 파일 객체를 닫아주는 역할을 한다.

프로그램을 종료할 때 파이썬 프로그램이 열려있는 파일의 객체를 자동으로 닫아주기 때문에 생략 가능하지만,

쓰기 모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생할 수 있기에 직접 닫아주는 것이 좋다.

파일을 쓰기 모드로 열어 출력값 적기

if __name__ == '__main__':
    f = open("test.txt", 'w')

    for i in range(10):
        input = "%d번째 줄입니다.\n" % i
        f.write(input)

    f.close()

위 프로그램의 결과는 다음과 같다.

파일에 데이터를 쓰는 것을 제외하면 다음의 코드와 같다.

if __name__ == '__main__':
    for i in range(10):
        print("%d번째 줄입니다." % i)

결론적으로 출력하는 방법만 다르다.

프로그램의 외부에 저장된 파일 읽어오기

1. readLine 함수 사용

 

if __name__ == '__main__':
    f = open("test.txt", 'r')
    line = f.readline()
    print(line)
    f.close()
    
0번째 줄입니다.

파일을 읽기 모드('r')로 열고, readLine() 함수를 사용하면 파일의 첫 번째 줄이 화면에 출력된다.

 

만약 모든 줄을 읽어서 출력하고 싶다면 다음과 같이 하면 된다.

# 방법 1
if __name__ == '__main__':
    f = open("test.txt", 'r')
    for i in range(10):
        line = f.readline()
        print(line)
    f.close()
    
# 방법 2
if __name__ == '__main__':
    f = open("test.txt", 'r')
    while True:
        line = f.readline()
        if not line: break
        print(line)

    f.close()

1번 방법은 파일의 길이를 알 때만 사용할 수 있고,

2번 방법은 길이를 모를 때도 사용할 수 있는 방법이다.

2. readLines 함수 사용하기

readLines 함수를 사용하면 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트로 반환한다.

즉 ["1번째 줄입니다.\n", "2번쨰 줄입니다.\n", . . . , "9번째 줄입니다.\n"]가 된다.

이를 print()를 통해 출력을 하면, print 자체에도 줄바꿈이 되어 2번 줄바꿈이 되게 된다.

이를 해결하기 위해서는 strip 함수를 쓰면 된다.

if __name__ == '__main__':
    f = open("test.txt", 'r')
    lines = f.readlines()
    for line in lines:
        print(line.strip())

    f.close()
    
0번째 줄입니다.
1번째 줄입니다.
2번째 줄입니다.
3번째 줄입니다.
4번째 줄입니다.
5번째 줄입니다.
6번째 줄입니다.
7번째 줄입니다.
8번째 줄입니다.
9번째 줄입니다.

  3. read 함수 사용하기

if __name__ == '__main__':
    f = open("test.txt", 'r')
    line = f.read()
    print(line)

    f.close()

 

read 함수를 사용하면 파일 내용 전체를 문자열로 돌려준다.

즉, 파일에 쓰여져 있는 그대로 문자열이 된다.

파일에 새로운 내용 추가하기

이미 존재하던 파일을 쓰기 모드로 열게 되면, 기존의 내용은 모두 사라지게 된다.

기존의 내용을 유지하면서 새로운 내용을 추가하고 싶을 때, 추가 모드('a')를 사용하면 된다.

기존에 생성했던 test.txt파일에 내용을 추가해보자.

if __name__ == '__main__':
    f = open("test.txt", 'a')
    for i in range(10, 20):
        data = "%d번째 줄입니다.\n" % i
        f.write(data)

    f.close()

with 함수

with문을 사용해서 파일 열고 닫기를 자동으로 처리할 수 있다.

with open("test.txt", 'w') as f:
    f.write("Study Python")

with은 위와 같은 형식으로 사영된다.

with 블록을 벗어나는 순간 열린 파일 객체(f)는 자동으로 close된다.

728x90

댓글