본문 바로가기
Software/Python

[파이썬의 기본] 파일에서 읽고 쓰기

by lovey25 2019. 5. 24.
반응형

파일 읽기

파일내용을 읽어오고 파일에 어떤 내용을 저장하기위해서는 우선 파일을 열어주는 과정이 필요합니다. 그리고 사용이 끝나면 파일을 닫아주는 절차까지 마쳐야 합니다. 그렇지 않으면 다른 프로그램에서 그 파일을 접근해서 수정하거나 하지 못하거든요.

바로 코드를 보겠습니다.

예제:

f = open("file.txt", "r") 

file = f.read() 
print(file) 
f.close()

이 예제는 “file.txt”에 포함된 모든내용을 화면에 출력해줍니다. 첫줄에서 open()이라는 함수를 이용해서 파일을 읽기전용(r)으로 연다음 “f”이라는 객체로 만들어 주었습니다. 그리고 read()함수를 사용해서 파일 내용을 읽어왔습니다.

파일을 열때 open()함수의 두번쩨 인자로 "r" 옵션이 사용되었는데요. 읽기전용으로 파일을 열겠다는 겁니다. 읽기전용 모드에서는 지정한 이름이 파일이 파이썬 코드와 동일한 위치에 저장이 되어 있어야합니다. 파일이 없다면 에러가 뜨겠죠.

파일을 특정 부분만 읽기위해서 read()함수에 읽고자 하는 만큼의 바이트 단위의 숫자를 인자값으로 넘겨줄 수도 있습니다. 지금처럼 파라미터가 없을 경우에는 파일 전체가 해당됩니다. 

예제:

f = open("file.txt", "r") 
print(f.read(16)) 
print(f.read(4)) 
print(f.read(4)) 
print(f.read()) 
f.close() 

그리고 read() 함수는 읽고난 파일의 나머지를 리턴해 주기 때문에 반복적으로 같은 파일을 호출해서 파일을 읽을 수 있습니다.

예제:

f = open("file.txt", "r") 
f.read() 
print("-다시 읽기-") 
print(f.read()) 
print("- 읽기 끝 -") 
f.close() 

결과:

파일의 내용을 줄별로 읽어오는데 readlines()라는 함수를 사용할 수 있습니다. 이 함수는 파일의 내용을 라일별로 잘라서 각 라인 내용을 요소로하는 리스트로 반환해 줍니다.

예제:

f = open("file.txt", "r") 
print(f.readlines())
f.close()

결과:

for 문을 사용해서 각 줄을 반복할수 있습니다.

예제:

f = open("file.txt", "r") 
for line in f: 
    print(line) 

f.close()  

결과:

결과를 보면 행간에 공백라인이 추가되어 있는데 print()함수가 결과값의 마지막에 자동적으로 개행을 추가해주기 때문이라고 합니다.

파일쓰기

파일에 내용을 쓰는데는 write()함수가 사용됩니다. 

예제:

f = open("file.txt", "w") 
f.write("파일을 새로 열었습니다.") 
f.close() 

f = open("file.txt", "r") 
print(f.read()) 
f.close()

결과:

파일을 열때 함수의 두번째 인자로 사용된 “w” 는 쓰기모드를 의미합니다. w모드로 파일을 여는 경우 명시한 이름의 파일이 없을 경우 새로운 파일이 생성됩니다. 만약, 동일한 파일이 이미 있는 경우에는 파일 내용을 모두 지우고 새로운 내용으로 덮어쓰기를 합니다. 조심해야 겠네요.

예제:

f = open("file.txt", "r") 
print("- 파일을 읽기모드로 열었습니다. -") 
print(f.read()) 
print("- 읽기 끝 -") 
f.close() 

f = open("file.txt", "w") 
print("- 파일을 쓰기모드로 열었습니다. -") 
f.write("무조건 덮어쓰기!!") 
print("- 쓰기 끝 -") 
f.close() 

f = open("file.txt", "r") 
print("- 파일을 읽기모드로 다시 열었습니다. -") 
print(f.read()) 
print("- 읽기 끝 -") 
f.close() 

결과:

 

write()함수는 파일쓰기가 정상적으로 수행이 된경우 파일에 저장한 내용의 바이트수를 반환합니다.

예제:

file = open("file.txt", "w") 
size_written= file.write("파일에 기록합니다.") 
print(size_written) 
file.close()

결과:

write()함수는 기본적으로 문자열을 쓰는 기능을 수행합니다. 그래서 문자가 아닌 다른 형태의 정보를 쓰기위해서는 데이터를 문자열로 변환하는 과정이 필요합니다.

실사용 예제

앞에서 언급했듯이 파일의 사용이 끝나고 나면 다른 프로그램이나 다른 사용자가 사용할 수 있도록 파일을 닫아주어야 한다고 했습니다. 뿐만 아니라 사용하지 않는 파일을 열어두고 있는것은 컴퓨터 자원을 낭비하고 있는 꼴이 되기 때문에 효율적인 프로그래밍을 위해서도 파일 사용이 끝나면 꼭 파일을 닫아주는 절차가 필요합니다.

그래서 관리적인 측면에서 코딩의 실수를 줄일 수 있도록 실제 파일을 이용하는 프로그램을 만들때는 구조적으로 계획된 작업이 완료가되면 반드시 파일을 닫을 수 있도록 하라고 권고하고 있습니다.

그 첫번째 방법으로 예외처리 구문을 이용한 방법입니다.

예제:

try: 
   f = open("filename.txt") 
   print(f.read()) 
finally: 
   f.close()

"try", "finally"를 이용해서 항상 close()함수를 거쳐서 지나가도록 구조를 만들어주었습니다. 이렇게 해주면 파일 사용이 정상적으로 끝나지 않고 에러가 발생하더라도 반드시 파일을 닫아줄 수 있게 됩니다.

또 다른 방법으로는 “with”구문을 사용하는 방법이 있습니다.

예제:

with open("file.txt") as f:
   print(f.read())

이렇게 사용을 하면 파일 객체인 f는 ‘with” 블럭 안에서만 접근할 수 있으며, “with” 구문이 종료되면 자동적으로 파일을 닫아줍니다. 

close()마져도 필요없고 try를 이용한 예외처리보다 이 방법이 더 간단하고 직관적인것 같네요.

 

이상 파이썬에서 파일을 읽고 쓰는 방법에 대해서 공부해 봤습니다.

 

끝!

반응형

댓글