파이썬 파일 읽기 및 쓰기(1)

윤태영·2023년 11월 25일
0
post-thumbnail

이미지 출처: https://wikidocs.net/192339

파이썬 파일 읽고 쓰기를 배워보겠습니다.
외부에서 우리가 수집하거나 작성한 어떤 텍스트 파일, csv 파일들을 읽어와서 웹상에 있는 텍스트, 되부 데이터들을 read하거나 쓰는 작업들을 해보겠습니다.

파일 Write 실습(1)

  • open 함수 설명
  • Mode 설명
  • 다양한 읽기(read)방법
  • 다양한 쓰기(write)방법
  • 입출력 중요 설명

읽기 모드 : r
쓰기모드 : w
추가모드 : a
텍스트모드 : t(기본값)
바이너리 모드 : b

상대경로('../, ./') : 현재 작업 중인 디렉토리나 위치를 기준으로 파일이나 폴더의 경로를 나타내는 방식(상대경로는 현재 폴더의 위치부터 따지는것)

절대 경로('C:\Django\example..') : 절대경로는 파일이나 폴더의 경로를 루트 디렉토리부터 전체 경로로 나타내는 방식(절대경로는 내가 어디에있든 어떤경로에서 작업을 하든 루트경로부터 따지기에 코드가 어디서든 실행된다.)

파일 읽기(Read) 📕

예1

  • open함수는 외부에 있는 파일을 연결해주는 함수

  • f에는 외부에있는 파일과 it_news파일을 연결해주는 기능이 있는데 그것이 open함수

  • 텍스트는 기본값이기 때문에 rt가 아니라 그냥 r로 해도 된다.

저는 제공받은 폴더를 제가 작업하는 공간에 옮겨놓았습니다. 그곳에 txt파일과 csv파일 여러개가 있씁니다. 여러분도 임의로 아무파일을 만들어서 넣어서 실습해봐도 좋을 것 같습니다.

# 현재는 같은 작업공간에 있기에 상대경로로 작성했지만 절대경로도 가능하다.
# 작성된 파일의 원문이 어떤 인코등으로 작성을 했는지 알아야 파일을 온전히 불러올 수 있다.
# open함수는 첫번째 인자로 파일의 위치를 받는다. 두번째 인자로는 r,w,a같은 옵션이들어간다
# 마지막 인자는 인코딩, 파이썬에서는 생략하면 기본 UTF-8로 인코딩한다.
f = open('./resource/it_news.txt','r', encoding = 'UTF-8')
>>> 실행하면 오류가 발생하지 말아야 한다.
# 속성 확인
 현재 파일과 연결된 상태에서 사용할 수 있는 메소드들이 나온다.
print(dir(f)) 
>>> ['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']
# 인코딩 확인
print(f.encoding)
>>> UTF-8
# 파일 이름
print(f.name)
>>> ./resource/it_news.txt
# 모드 확인
print(f.mode)
>>> r (read)
cts = f.read()
# txt내용을 읽어와서 불러온다.
print(cts)
>>>
Right now gamers can pay just $1 for access to hundreds of titles across PC
and Xbox via Microsoft Xbox Game Pass Ultimate service?but dont
activate that insanely cheap one-month trial just yet. You can lock in up to
three years of Xbox Game Pass Ultimate with that same dollar if you play
your cards right.
----------------------------------------------------------------------------
When you activate Microsoft’s E3 2019 promotion, it not only begins the trial,
but also converts existing Xbox Live Gold and standard Xbox Game Pass
subscriptions on your account to Game Pass Ultimate (normally $15 per
month). Any prepaid time up to the maximum of three years gets the upgra
# 반드시 close
f.close()
print()

예2

보통 위의예제처럼 코드를 쓰지 않습니다. close()를 해야하고 파일을 읽어서 처리하는 작업이 들어가기 때문입니다.

with문을 사용하면 with문에 있는 내용을 모두 실행하고 나올때 파이썬 내부적으로 with에서 사용했던 리소스들을 저절로 반환해준다 -> close호출하지 않아도 내부적으로 리소스가 닫힌다.

  • alies를 통해 with문을 f로 지정한다.
with  open('./resource/it_news.txt','r', encoding = 'UTF-8') as f:
    c = f.read()
    print(c)
    print(iter(c))
    print(list(c))
>>>
Right now gamers can pay just $1 for access to hundreds of titles across PC 
and Xbox via Microsoft Xbox Game Pass Ultimate service?but dont
activate that insanely cheap one-month trial just yet. You can lock in up to
three years of Xbox Game Pass Ultimate with that same dollar if you play
your cards right.
--------------------------------------------------------------------------
When you activate Microsoft’s E3 2019 promotion, it not only begins the trial,
but also converts existing Xbox Live Gold and standard Xbox Game Pass
subscriptions on your account to Game Pass Ultimate (normally $15 per
month). Any prepaid time up to the maximum of three years gets the upgrade.
<str_iterator object at 0x0000020B1B71E1A0>
['R', 'i', 'g', 'h', 't', ' ', 'n', 'o', 'w', ' ', 'g', 'a', 'm', 'e', 'r', 's', ' ', 'c', 'a', 'n', ' ', 'p', 'a', 'y', ' ', 'j', 'u', 's', 't', ' ', '$', '1', ' ', 'f', 'o', 'r', ' ', 'a', 'c', 'c', 'e', 's', 's', ' ', 't', 'o', ' ', 'h', 'u', 'n', 'd', 'r', 'e', 'd', 's', ' ', 'o', 'f', ' ', 't', 'i', 't', 'l', 'e', 's', ' ', 'a', 'c', 'r', 'o', 's', 's', ' ', 'P', 'C', ' ', '\n', 'a', 'n', 'd', ' ', 'X', 'b', 'o', 'x', ' ', 'v', 'i', 'a', ' ', 'M', 'i', 'c', 'r', 'o', 's', 'o', 'f', 't', ' ', 'X', 'b', 'o', 'x', ' ', 'G', 'a', 'm', 'e', ' ', 'P', 'a', 's', 's', ' ', 'U', 'l', 't', 'i', 'm', 'a', 't', 'e', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e', '?', 'b', 'u', 't', ' ', 'd', 'o', 'n', 't', ' ', '\n', 'a', 'c', 't', 'i', 'v', 'a', 't', 'e', ' ', 't', 'h', 'a', 't', ' ', 'i', 'n', 's', 'a', 'n', 'e', 'l', 'y', ' ', 'c', 'h', 'e', 'a', 'p', ' ', 'o', 'n', 'e', '-', 'm', 'o', 'n', 't', 'h', ' ', 't', 'r', 'i', 'a', 'l', ' ', 'j', 'u', 's', 't', ' ', 'y', 'e', 't', '.', ' ', 'Y', 'o', 'u', ' ', 'c', 'a', 'n', ' ', 'l', 'o', 'c', 'k', ' ', 'i', 'n', ' ', 'u', 'p', ' ', 't', 'o', ' ', '\n', 't', 'h', 'r', 'e', 'e', ' ', 'y', 'e', 'a', 'r', 's', ' ', 'o', 'f', ' ', 'X', 'b', 'o', 'x', ' ', 'G', 'a', 'm', 'e', ' ', 'P', 'a', 's', 's', ' ', 'U', 'l', 't', 'i', 'm', 'a', 't', 'e', ' ', 'w', 'i', 't', 'h', ' ', 't', 'h', 'a', 't', ' ', 's', 'a', 'm', 'e', ' ', 'd', 'o', 'l', 'l', 'a', 'r', ' ', 'i', 'f', ' ', 'y', 'o', 'u', ' ', 'p', 'l', 'a', 'y', ' ', '\n', 'y', 'o', 'u', 'r', ' ', 'c', 'a', 'r', 'd', 's', ' ', 'r', 'i', 'g', 'h', 't', '.', '\n', '\n', 'W', 'h', 'e', 'n', ' ', 'y', 'o', 'u', ' ', 'a', 'c', 't', 'i', 'v', 'a', 't', 'e', , 'y', 'o', 'u', ' ', 'a', 'c', 't', 'i', 'v', 'a', 't', 'e', ' ', 'M', 'i', 'c', 'r', 'o', 's', 'o', 'f', 't', '’', 's', ' ', 'E', '3', ' ', '2''n', ',', ' ', 'i', 't', ' ', 'n', 'o', 't', ' ', 'o', 'n', 'l, '0', '1', '9', ' ', 'p', 'r', 'o', 'm', 'o', 't', 'i', 'o', 'n', ',', ' ', 'i', 't', ' ', 'n', 'o', 't', ' ', 'o', 'n', 'l', 'y', ' ', 'b', 'e'o', ' ', 'c', 'o', 'n', 'v', 'e', 'r', 't', 's', ' ', 'e', 'x', 'g', 'i', 'n', 's', ' ', 't', 'h', 'e', ' ', 't', 'r', 'i', 'a', 'l', ',', ' ', '\n', 'b', 'u', 't', ' ', 'a', 'l', 's', 'o', ' ', 'c', 'o', 'n, 'n', 'd', 'a', 'r', 'd', ' ', 'X', 'b', 'o', 'x', ' ', 'G', ', 'v', 'e', 'r', 't', 's', ' ', 'e', 'x', 'i', 's', 't', 'i', 'n', 'g', ' ', 'X', 'b', 'o', 'x', ' ', 'L', 'i', 'v', 'e', ' ', 'G', 'o', 'l', 'd 'u', 'r', ' ', 'a', 'c', 'c', 'o', 'u', 'n', 't', ' ', 't', '', ' ', 'a', 'n', 'd', ' ', 's', 't', 'a', 'n', 'd', 'a', 'r', 'd', ' ', 'X', 'b', 'o', 'x', ' ', 'G', 'a', 'm', 'e', ' ', 'P', 'a', 's', 's', ' y', ' ', '$', '1', '5', ' ', 'p', 'e', 'r', ' ', '\n', 'm', 'o
', '\n', 's', 'u', 'b', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', 's', ' ', 'o', 'n', ' ', 'y', 'o', 'u', 'r', ' ', 'a', 'c', 'c', 'o', 'u', '', 't', 'h', 'e', ' ', 'm', 'a', 'x', 'i', 'm', 'u', 'm', ' ',n', 't', ' ', 't', 'o', ' ', 'G', 'a', 'm', 'e', ' ', 'P', 'a', 's', 's', ' ', 'U', 'l', 't', 'i', 'm', 'a', 't', 'e', ' ', '(', 'n', 'o', 'r', ' 'd', 'e', '.', '\n', '\n']m', 'a', 'l', 'l', 'y', ' ', '$', '1', '5', ' ', 'p', 'e', 'r', ' ', '\n', 'm', 'o', 'n', 't', 'h', ')', '.', ' ', 'A', 'n', 'y', ' ', 'p', 'r', 
'e', 'p', 'a', 'i', 'd', ' ', 't', 'i', 'm', 'e', ' ', 'u', 'p', ' ', 't', 'o', ' ', 't', 'h', 'e', ' ', 'm', 'a', 'x', 'i', 'm', 'u', 'm', ' ', 
'o', 'f', ' ', 't', 'h', 'r', 'e', 'e', ' ', 'y', 'e', 'a', 'r', 's', ' ', 'g', 'e', 't', 's', ' ', 't', 'h', 'e', ' ', 'u', 'p', 'g', 'r', 'a', 
'd', 'e', '.', '\n', '\n']

예2

read() : 전체 읽기

read(10) : 10Byte (열글자만 읽어온다!)

with  open('./resource/it_news.txt','r', encoding = 'UTF-8') as f:
    c = f.read(20) # 20Byte만큼 읽어온다.
    print(c)
>>> Right now gamers can (공백포함 20글자)
with  open('./resource/it_news.txt','r', encoding = 'UTF-8') as f:
    c = f.read(20) # 20Byte만큼 읽어온다.
    print(c)
    c= f.read(20) # 커서가 있다. 내가 마지막에 읽었는지를 이 내부적으로 기억하고 있다.
    print(c)
>>> Right now gamers can
>>> pay just $1 for acc (20글자를 불러온뒤 이어서 20글자를 불러온다.)
with  open('./resource/it_news.txt','r', encoding = 'UTF-8') as f:
    c = f.read(20) 
    print(c)
    c= f.read(20) 
    print(c)
    f.seek(0.0) # 처음부터 다시 읽는다.
    c = f.read(20)
    print(c)
>>> 
### seek(0.0)때문에 다시 불러온다.
Right now gamers can
 pay just $1 for acc
Right now gamers can

예3

readline : 한 줄 씩 읽기

with  open('./resource/it_news.txt','r', encoding = 'UTF-8') as f:
    line = f.readline() # 반복문 안에서 루프를 돌면서 출력해주는 것이 좋다.
    print(line)
    line = f.readline()
    print(line)
>>> Right now gamers can pay just $1 for access to hundreds of titles across PC 
>>> and Xbox via Microsoft Xbox Game Pass Ultimate service?but dont

예4

  • readlines : 전체를 읽은 후 라인 단위 리스트로 저장
with  open('./resource/it_news.txt','r', encoding = 'UTF-8') as f:
    cts = f.readlines()
    print(cts)
    print()
    for c in cts:
        print(c, end='')
>>>
['Right now gamers can pay just $1 for access to hundreds of titles across PC \n', 'and Xbox via Microsoft Xbox Game Pass Ultimate service?but dont \n', 'activate that insanely cheap one-month trial just yet. You can lock in up to \n', 'three years of Xbox Game Pass Ultimate with that same dollar if you play \n', 'your cards right.\n', '\n', 'When you activate Microsoft’s E3 2019 promotion, it not only begins the trial, \n', 'but also converts existing Xbox Live Gold and standard Xbox Game Pass \n', 'subscriptions on your account to Game Pass Ultimate (normally $15 per \n', 'month). Any prepaid time up to the maximum of three years gets the upgrade.\n', '\n']
# for문으로 리스트를 출력
>>> 
Right now gamers can pay just $1 for access to hundreds of titles across PC
and Xbox via Microsoft Xbox Game Pass Ultimate service?but dont
activate that insanely cheap one-month trial just yet. You can lock in up to
three years of Xbox Game Pass Ultimate with that same dollar if you play
your cards right.
When you activate Microsoft’s E3 2019 promotion, it not only begins the trial,
but also converts existing Xbox Live Gold and standard Xbox Game Pass
subscriptions on your account to Game Pass Ultimate (normally $15 per
month). Any prepaid time up to the maximum of three years gets the upgrade.

이제는 파일을 써보는 코딩을 해봅시다.

파일 쓰기(Write) 📕

  • 기존에 있는 파일을 연결할때도 open을 쓴다면 우리가 쓰고자 하는 없는 파일을 가상으로 연결을 할때도 open함수 사용

예1

with open('./resource/contents1.txt', 'w') as f:
    f.write('I love python\n')
# contents1.txt파일을 확인해보자.
>>> I love python # 제대로 작성되어 있다.

예2
기존에 파일 contents1.txt파일에 a(append)옵션을 이용해 추가로 파일을작성하면 기존의 내용뒤에 삽입된다.

with open('./resource/contents1.txt', 'a') as f:
    f.write('I love python2')
>>> I love python
>>> I love python2

예3

  • writelines : 리스트 - > 파일
# 리스트에 있는 요소들을 줄바꿈하여 작성한다.
with open('./resource/contents2.txt', 'w') as f:   
    list = ['Orange\n', 'Apple\n', 'Banana\n', 'Melon\n']
    f.writelines(list)
>>>
Orange
Apple
Banana
Melon

예4

# 프린트문이 파일로 출력
# 자주 사용하지는 않을 것 같다.
with open('./resource/contents3.txt', 'w') as f:    
    print('Test Text Write!', file = f)
    print('Test Text Write!', file = f)
    print('Test Text Write!', file = f)
>>>
Test Text Write!
Test Text Write!
Test Text Write!

다음시간에는 데이터분석에서 많이 쓰이는 csv파일을 읽고 쓰는 방법을 배우겠습니다.😎

출처 : 인프런

profile
ice blue

0개의 댓글