ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL. 21 파일 사용하기
    TIL 2020. 10. 29. 22:46
    728x90

    ## 파일 사용하기

    ## 프로그래밍에서 중요한 축을 차지하는 부분이 파일 처리이다.

     

    ## 파일에 문자열 사용하기

    ## 파일에 문자열을 쓸 때는 open 함수로 파일을 열어서 파일 객체(file object)를 얻은 뒤에 write 메서드를 사용합니다.

    # 파일객체 = open(파일이름, 파일모드)

    # 파일객체.write('문자열')

    # 파일객체.close()

     

    ## IDLE로 아래 코드 입력

    file = open('hellow.txt', 'w') # hello.txt 파일을 쓰기 모드(w)로 열기. 파일 객체 반환

    file.write('Hellow, cordermun') # 파일에 문자열 저장

    file.close() # 파일 객체 닫기

     

    # 위와 같이 입력하며 'hellow.txt' 파일이 저장될 경로와 이름을 지정해준다.(지정한이름으로의.py 파일이 만들어지고 hello.txt 파일을 생성한다)

    # open 함수로 파일을 열고, 'w' -> 쓰기모드로 파일 모드를 지정해준다. (write)

    # 'w' 상태의 파일로 직접 작성할 수 있으며 작성된 문자열을 파일에 저장한다.

    # 어떠한 행위를 마무리하고는 반드시 close를 이용해 파일 객체를 닫아줘야한다.

     

    ## 위에서 작성한 파일의 문자열 읽기

    ## 파일을 읽을 때도 open 함수로 파일을 열어서 파일 객체를 얻은 뒤 read 메서드로 파일의 내용을 읽습니다.

    ## 단, 이때는 파일 모드를 읽기 모드 'r'로 지정합니다.

    # 변수 = 파일객체.read()

     

    file = open('hellow.txt', 'r') # hellow.txt 파일을 읽기 모드(r)로 열기. 파일 객체 반환

    s = file.read() # 파일에서 문자열 읽기

    print(s) # Hellow, codermun

    file.close() # 파일 객체 닫기

     

    ## 위에서 작성된 파일에서 문자열을 읽는 방법이다.

    ## open함수로 해당 파일을 열고, 'r' --> 읽기모드로 파일 모드를 지정해준다.(read)

    ## 임의의 변수를 할당하여 read의 반환값의 내용을 읽을 수 있다.

    ## Hellow, codermun이 출력됨을 확인할 수 있다

    ## 여기서도 모두 마무리하고 반드시 close를 이용해 파일 객체를 닫아줘야한다.

     

    ## 자동으로 파일 객체 닫기

    ## python에서는 일일이 close하는 과정을 줄이기 위해

    ## 파이썬에서는 with as를 사용하면 파일을 사용한 뒤 자동으로 파일 객체를 닫아준다.

    ## 아래와 같이 with 다음에 open으로 파일을 열고 as 뒤에 파일 객체를 지정한다.

    # with open(파일이름, 파일모드) as 파일객체:

    # 코드

     

    with open('hello.txt', 'r') as file: # hello.txt 파일을 읽기 모드(r)로 열기

    s = file.read() # 파일에서 문자열 읽기

    print(s) # Hello, world!

     

    ## read를 사용해도 파일을 닫지 않고 마무리해도 에러없이 잘 작동한다

     

    ## 문자열 여러줄을 파일에 쓰기, 읽기

     

    ## 문자열을 여러줄 입력할때는 반복문을 사용해주면 된다.

     

    with open('hello.txt', 'w') as file: # hello.txt 파일을 쓰기 모드(w)로 열기

    for i in range(3):

    file.write('Hello, world! {0}\n'.format(i))

     

    ## open 함수와 'w' 모드로 파일 열기

    ## for 문과 formatting을 이용해 여러줄의 문자열을 입력할 수 있다



    ## 리스트 안의 문자열을 파일에 쓰기

     

    # 파일객체.writelines(문자열리스트)

     

    lines = ['안녕하세요.\n', '파이썬\n', '코딩 도장입니다.\n']

     

    with open('hello.txt', 'w') as file: # hello.txt 파일을 쓰기 모드(w)로 열기

    file.writelines(lines)

     

    # 파일객체.writelines(리스트)를 이용해 리스트 안의 문자열을 파일에 작성할 수 있다

    ## 여기서 리스트 안의 요소는 \n 이 적용되면 여러줄이 입력된다

    ## \n이 없으면 위 요소는 한줄로 입력된다.

     

    ## 파일의 내용을 한줄씩 리스트로 가져오기

    ## read는 파일의 내용을 읽어서 문자열로 가져오지만 readlines는 파일의 내용을 한 줄씩 리스트 형태로 가져옵니다..

    # 변수 = 파일객체.readlines()

     

    with open('hello.txt', 'r') as file: # hello.txt 파일을 읽기 모드(r)로 열기

    lines = file.readlines()

    print(lines)

     

    # ['안녕하세요\n', '파이썬\n', '코딩도장입니다\n'] 출력

     

    ## 파일의 내용을 한줄씩 읽기

    # 파일의 내용을 한 줄씩 순차적으로 읽으려면 readline을 사용한다.

    # 변수 = 파일객체.readline()

     

    with open('hello.txt', 'r') as file: # hello.txt 파일을 읽기 모드(r)로 열기

    line = None # 변수 line을 None으로 초기화

    while line != '':

    line = file.readline()

    print(line.strip('\n')) # 파일에서 읽어온 문자열에서 \n 삭제하여 출력

     

    ## 보통 어떤 파일을 열때는 해당 파일에 문자열이 몇개있는지 알 수 없다.

    ## 따라서 while 반복문을 사용해야한다(반복횟수가 정해져있지 않을때)

     

    ## line = None 으로 지정하는 이유

    ## readlined 메서드는 더 이상 읽을 줄이 없을때 빈 문자열을 반환한다.

    ## 이 특성을 이용해 while의 조건식을 만든다

    ## 먼저 line 이라는 변수를 만들어주지 않으면 while 조건에서 빈 문자열과의 비교대상이 없기에 error가 발생한다.

    ## 또한, line을 '' 빈문자열로 초기화하면 처음 조건부터 맞지 않아 반복문이 실행되지 않는다.

    ## line = [] 로 지정해도 같은 결과가 확인된다.(?)

     

    ## line = file.readline() ## 파일의 내용을 한줄씩 순차적으로 line 이라는 변수에 할당하고 출력하고 할당하고 출력하고를 반복한다.

    ## strip 메서드를 이용해 \n을 삭제하고 출력해야 한다 삭제하지 않을 경우 줄바꿈이 2번 일어난다 (print 디폴트로 줄바꿈이 되어있다)

     

    ## for 문으로 파일의 내용을 줄 단위로 읽기

     

    with open('hello.txt', 'r') as file: # hello.txt 파일을 읽기 모드(r)로 열기

    for line in file: # for에 파일 객체를 지정하면 파일의 내용을 한 줄씩 읽어서 변수에 저장함

    print(line.strip('\n')) # 파일에서 읽어온 문자열에서 \n 삭제하여 출력

     

    ## for 문을 사용하면 조금 더 간편한것 같다.

    ## readline을 쓰지 않기 때문

     

    ## 파이썬 객체를 파일에 저장하기, 가져오기

    # 파이썬은 객체를 파일에 저장하는 pickle 모듈을 제공합니다.

    # 다음과 같이 파이썬 객체를 파일에 저장하는 과정을 피클링(pickling)이라고 하고,

    # 파일에서 객체를 읽어오는 과정을 언피클링(unpickling)이라고 한다.

     

    ## pickle

    # 피클링은 pickle 모듈의 dump 메서드를 사용합니다.

     

    import pickle

     

    name = 'james'

    age = 17

    address = '서울시 서초구 반포동'

    scores = {'korean': 90, 'english': 95, 'mathematics': 85, 'science': 82}

     

    with open('james.p', 'wb') as file: # james.p 파일을 바이너리 쓰기 모드(wb)로 열기

    pickle.dump(name, file)

    pickle.dump(age, file)

    pickle.dump(address, file)

    pickle.dump(scores, file)

     

    ## IDLE로 코드를 실행하면 james.p 라는 파일명으로 파일이 생성된다.

    ## 여기서 피클 -> 파일로 저장하는 단계이므로 모드는 'wb'를 입력하며 wb == writebinary라는 뜻이다.

    ## binary 파일은 컴퓨터가 처리하는 방식의 파일로 텍스트파일과 같이 사람이 알아보기는 어렵다.

     

    ## unpickle

    # 파이썬 객체를 읽어오는 언피클링

    # 언피클링은 pickle 모듈의 load를 사용한다.

    # 그리고 언피클링을 할 때는 반드시 파일 모드를 바이너리 읽기 모드 'rb'로 지정해야 한다.

     

    import pickle

     

    with open('james.p', 'rb') as file: # james.p 파일을 바이너리 읽기 모드(rb)로 열기

    name = pickle.load(file)

    age = pickle.load(file)

    address = pickle.load(file)

    scores = pickle.load(file)

    print(name)

    print(age)

    print(address)

    print(scores)

     

    # james

    # 17

    # 서울시 서초구 반포동

    # {'korean': 90, 'english': 95, 'mathematics': 85, 'science': 82}



    ## 앞써 pickle dump 메서드를 4번 사용하였기 때문에

    ## 마찬가지로 파일에서 객체(값)을 가져올때 pickl.load를 4번 사용해야 합니다

    ## name age address scores 순서대로 입력하여 load 시도 순서대로 입력해야한다고 하지만

    ## 순서가 바뀌어도 문제없이 동작한다. 혹시모르니 순서대로 입력하도록 하자




    728x90

    'TIL' 카테고리의 다른 글

    TIL.23 N-gram 만들기  (0) 2020.10.31
    TIL. 22 회문 판별하기  (0) 2020.10.30
    TIL. 20 set_조작하기_2  (0) 2020.10.28
    TIL.19 set 조작하기  (0) 2020.10.27
    TIL. 18 Dictionary 조작하기  (0) 2020.10.26
Designed by Tistory.