프로그래밍/Python

Python-21) python read, readline, write, writelines : 파이썬 파일 쓰기, 파일 읽기 , python txt

LeeSeunghyuk 2020. 12. 24. 11:42
반응형

 

안녕하세요

이번 시간에는 텍스트 파일을 파이썬을 통해 다루는 실습을 해보겠습니다.

데이터 분석을 하기 위해서 txt, xlsx 등 파일들을 파이썬으로 읽고, 이를 다룰 수 있어야 합니다.

 

txt 파일은 다음 게시글의 emp_table.txt 파일을 사용하겠습니다.

https://lsh-story.tistory.com/2?category=952228

 

SQL-2) Query

안녕하세요 이승혁입니다. 지난 포스팅에는 오라클 DB를 설치했습니다. 이번 포스팅은 오라클 DB에서 간단한 SQL을 실습해 보겠습니다. ※ 오라클 데이터 베이스에 접속하는 방법 윈도우 검색창

lsh-story.tistory.com

 

※ read

 

     텍스트 파일을 읽고 그 내용을 화면에 출력하기 위해, 텍스트 읽기 모드로 파일을 엽니다.

     파이썬 내장함수 open()을 이용해서 파일을 엽니다.

     open('(파일 주소+)파일명','모드') 문법 구조를 사용합니다. 

     파일 주소를 적지 않는다면 현재 실행 디렉토리를 기준으로 합니다.

 

-현재 디렉토리 확인하기

https://lsh-story.tistory.com/44

 

Python 현재 디렉토리 확인하기

파이썬이 현재 실행중인 디렉토리를 확인하는 방법입니다. import os print(os.getcwd()) 현재 실행중인 디렉토리로 주소를 따로 저장하지 않은 상태에서 새로운 파일, 텍스트를 저장할 경우 해당 위치

lsh-story.tistory.com

     

 - 파일 모드의 종류

r , rt 텍스트 모드로 읽기
w, wt 텍스트 모드로 쓰기
 a, at
텍스트 모드로 파일 마지막에 추가하기
rb 바이너리 모드로 읽기
wb 바이너리 모드로 쓰기
ab 바이너리 모드로 파일 마지막에 추가하기

     open함수가 파일을 열면 파일 객체를 리턴해 줍니다.

 

open 함수를 사용해 파일을 열고, 파일 객체의 read 함수를 통해 내용 확인하기

f=open('d:\\emp_table.txt','r')
data=f.read()
data

open 함수의 인자로 파일 주소와 파일명을 사용하고 , 읽기모드 'r'을 인자로 사용했습니다.

파일 객체를 변수 f에 할당합니다.

data 변수에 파일 객체의 read 함수를 사용한 결과를 담습니다.

 

읽기 모드를 사용하면 read 함수를 사용할 수 없습니다.

 

 

※ 위 코드는 실행하지 마세요. 실행하면 emp_table.txt 파일이 쓰기 모드로 열려 빈 파일로 변경됩니다.

 


※ readline

 

     텍스트 파일의 용량이 아주 큰 경우 read 함수를 사용해 한 번에 읽는 것은 메모리 문제를 야기할 수 있습니다.

     텍스트 파일을 한 줄 단위로 읽고 작업을 수행하면 문제를 해결할 수 있습니다.

     파일 객체의 readline() 메소드는 한 줄을 읽고나면 다음 시작 위치는 그 다음 줄의 맨 처음이 됩니다.

     readline() 메소드를 연속해서 사용하여 텍스트 파일 전체를 읽을 수 있습니다.

f=open('d:\\emp_table.txt','r')
data=f.readline()
data

    f 변수는 텍스트 파일을 읽은 파일 객체입니다.

    readline 함수를 통해 파일 객체의 첫 줄을 data 변수에 할당하여 결과를 확인합니다.

    마지막 개행 문자가 포함된 첫 번째 1줄이 출력되는 것을 확인할 수 있습니다.

    print 함수를 사용해 출력할 경우 텍스트 파일 내용 + 공백 1줄('\n')이 출력됩니다.

 

    공백 한 줄을 없애고, 파일 객체의 모든 내용을 한 줄씩 출력하는 코드는 다음과 같습니다.

f=open('d:\\emp_table.txt','r')
data=f.readline()
while data:
    print(data,end='')
    data=f.readline()

 

     while 문을 통해 공백(False)이 출력될 때까지 반복하며,

     print 함수의 마지막은 공백('')으로 출력합니다.

     data는 마지막 줄바꿈'\n'을 가지고 있어, end=''를 사용해 다음 출력할 내용을 바로 이어서 출력하는 것입니다.

     end는 print() 함수의 옵션이며 나중에 따로 다루도록 하겠습니다.

 


 

※ readlines

 

     텍스트 파일을 한 번에 읽는 또 다른 방법은 readlines 함수를 사용하는 것입니다.

     텍스트 파일의 끝까지 한 줄씩 읽어 각 줄을 요소로 하는 리스트를 리턴합니다.

     read 함수와 마찬가지로 한 번에 읽기 때문에 메모리가 크면 문제가 발생할 수 있습니다.

f=open('d:\\emp_table.txt','r')
data=f.readlines()
print('---반환된 리스트---\n',data,'\n\n---내용 확인하기---')
for i in data:
    print(i,end='')


※ close

 

     open 함수를 통해 파일을 다양한 모드로 열어서 파일 객체로 반환합니다.

     작업이 끝난 뒤에는 파일 객체의 close 메소드를 사용해 파일을 닫습니다.

     파이썬을 종료하면 알아서 close가 되지만, 따로 해주는 것이 좋습니다.

    쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문입니다.

f=open('d:\\emp_table.txt','r')
data=f.readlines()
print('---반환된 리스트---\n',data,'\n\n---내용 확인하기---')
for i in data:
    print(i,end='')
f.close()

 

※ write

 

     입력받은 텍스트를 파일로 저장하기 위해서 파일 객체의 write 함수를 사용합니다.

     open 함수 사용 시 w 모드를 사용해서 파일을 열어주며 원하는 파일명을 지정합니다.

f=open('d:\\티스토리실습.txt','w')
text='티스토리 실습한 결과입니다.'
f.write(text)
f.close()

     새로운 파일이 생겼고, text의 내용이 적혀있습니다.


※ writelines

 

     readlines 함수를 통해 텍스트 파일을 한 줄씩 리스트로 반환되는 것을 확인했습니다.

     writelines 함수는 반대로 리스트의 내용을 한 줄씩 텍스트 파일로 작성하여 저장해줍니다.

f=open('d:\\티스토리 write lines 실습.txt','w')
text=['티스토리 실습\n','티스토리 실습을 해봅니다\n','python open\n','python read\n',\
      'python write\n']
f.writelines(text)
f.close()

     writelines 함수는 리스트의 요소를 하나씩 기록해주는 역할만을 하기 때문에 자동 줄바꿈 기능은 없습니다.

     따라서 요소의 끝에 \n 개행문자를 추가해줍니다.


※ 텍스트 파일 복사하기

 

     위의 함수들을 응용하여 텍스트 파일을 복사할 수 있습니다. 원리는 다음과 같습니다.

     a 변수 : 읽기 모드 open 후 file의 내용을 저장

     b 변수 : 쓰기 모드 open 후 a 변수의 내용을 저장

 

f=open('d:\\티스토리 write lines 실습.txt','r')
file=f.readlines()
f2=open('d:\\복사본.txt','w')
f2.writelines(file)

f.close()
f2.close()

      제대로 텍스트 파일이 복사 된 것을 확인할 수 있습니다.


※ with ~ as

 

     파일을 close하는 것이 좋다고 위에서 말씀 드렸는데, with ~ as 구문을 이용하여 파일을 열게되면

     따로 닫지 않아도 파일에 대한 작업이 끝나면 자동으로 닫아줍니다.

 

     1. with ~ as 사용하지 않았을 때

       f = open ( '파일명' , '모드' )

 

      2. with ~ as 사용했을 때
       with open ( '파일명' , '모드' ) as f :

           파일 사용 작업

 

f=open('with 실습.txt','w')
f.write('abcd')
f.close()
f.write('a')

  정상적으로 파일 객체가 닫혀 close 함수 이후에는 write 작업을 할 수 없는 것을 확인합니다.

 

   with ~ as 를 사용해도 정상적으로 오류가 발생한다면 파일이 닫혔다는 것을 알 수 있습니다.

with open('with~as 실습.txt','w') as f:
    f.write('실습 진행중')

f.write('실습 확인용')

 

     1. 파일이 정상적으로 작성 되었습니다.

     2. with ~ as 구문의 바깥쪽에 작성된 write 함수의 내용은 텍스트 파일에 기록되지 않았습니다.

     3. 파일이 정상적으로 닫혔습니다.

 

이번 시간에는 파이썬을 사용해서 텍스트 파일을 읽고, 쓰는 실습을 진행해 보았습니다.

데이터 분석을 위한 기초로 잘 사용할 수 있도록 익숙해 지는 것이 좋다고 생각합니다.

 

감사합니다.

반응형