티스토리 뷰

반응형

텍스트 파일 입출력



- 키보드 입력 : input()

- 모니터 출력 : print()


- 외부 파일 읽기 : read(), readline(), readlines()

- 외부 파일로 저장 : write(), writelines()





# 과정 

 

1) 파일 열기

변수명 = open('FileName', 'Mode')


Mode :

  -   (읽기,default)

  - w   (쓰기)

  - r+  (읽기+쓰기)

  - a   (이어쓰기)


  - t    (텍스트 파일 처리,default)

  - b   (이진 파일 처리)

 


# 2. 파일 처리 

readlines()       

str = ''

while True :        # 반복문을 사용하여 파일에 있는 행 읽기

    str = file.readline()     # 빈 리스트의 메모리 영역에 파일을 한 줄씩 읽어 저장

    if str == '':        

        break

    print(str, end='')



# 3. 파일 닫기 

변수명.close()      # 메모리 누수(out of memory ) 방지






# 파일 읽기 

  

  

1. 외부 텍스트 파일을 한 번에 모두 읽기

def read_txt(filename) :

    str = ''


    file = open(filename,'r')


    str = file.readlines()

    return(str)


    file.close()

================ RESTART: D:/Aaron/Q.py ================

>>> read_txt('test1.txt')

['1, 2, 3, 4\n', '5, 6, 7, 8']       # 개행문자가 포함되어 읽혀짐


2. 외부 텍스트 파일을 한 줄씩 읽기

# 2-1)

def read_txt(filename) :

    str = ''


    file = open(filename,'r')


    str = file.readlines()

    for li in str :

        print(li, end='')


    file.close()

================ RESTART: D:/Aaron/Q.py ================

>>> read_txt('test1.txt')

1, 2, 3, 4

5, 6, 7, 8

# 2-2)

def read_txt(filename) :

    str = ''


    file = open(filename,'r')


    while True :

        str = file.readline()

        if str == '' :

            break

        print(str, end='')


    file.close()

================ RESTART: D:/Aaron/Q.py ================

>>> read_txt('test1.txt')

1, 2, 3, 4

5, 6, 7, 8

# 2-3)

with~as 문           # close() 함수 생략이 가능한 문법, close() 함수의 부재로 인한 메모리 누수 방지

def read_txt(filename) :

    str = ''


    with open(filename,'r') as file :

        str = file.readlines()

        for li in str :

            print(li, end='')

================ RESTART: D:/Aaron/Q.py ================

>>> read_txt('test1.txt')

1, 2, 3, 4

5, 6, 7, 8



3. 분리 구분기호로 데이터 분리

def read_txt(filename, sep='') :

    str = ''


    file = open(filename,'r')


    str = file.readlines()


    for i in range(0, len(str)) :

        str[i] = str[i].strip().split(sep)  

    return(str)

    

    file.close()

================ RESTART: D:/Aaron/Q.py ================

>>> l1 = read_txt('test1.txt',',')

>>> l1

[['1', ' 2', ' 3', ' 4'], ['5', ' 6', ' 7', ' 8']]


4. 분리 구분기호와 포맷 전달

def read_txt(fname, fmt, sep='') :

    file = open(fname, 'r')

    

    str = file.readlines()

    l2 = []


    for a in str :

        ll = a.strip().split(sep)

        l1 = []

        for b in ll :

            l1.append(fmt(b))

        l2.append(l1)

        

    return(l2)


    file.close()

================ RESTART: D:/Aaron/Q.py ================

>>> l1 = read_txt('test1.txt',int,',')

>>> l1

[[1, 2, 3, 4], [5, 6, 7, 8]]





# 파일 저장


1. 사용자 입력 내용을 파일로 저장

def write_txt(filename, sep='') :

    l1 = []

    str = ''


    outFile = open(filename,'w')


    while True :

        str = input('input : ')

        if str !='' :

            outFile.writelines(str + sep)

        else :

            break

        

    outFile.close()

    print('[ 파일 저장 완료 ]')

================ RESTART: D:/Aaron/Q.py ================

>>> l1 = [1,2,3,4,5,6,7,8]

>>> write_txt('wtest.txt', sep=' ')

input : 1

input : 2

...

input : 7

input : 8

input : 

[ 파일 저장 완료 ]

=================================================

'wtest.txt'

1 2 3 4 5 6 7 8 


2. 리스트 내용을 파일로 저장(1차원 리스트)

def write_txt(list, fname, sep) :

    file = open(fname, 'w')

    vstr = ''

    

    for a in list :

        vstr = vstr + str(a) + sep

    vstr = vstr.rstrip(sep)  # 마지막에도 추가되는  sep을 삭제 

    

    file.writelines(vstr)      # 한 라인씩 저장 

        

    file.close()

    print('[ 파일 저장 완료 ]')

================ RESTART: D:/Aaron/Q.py ================

>>> l1 = [1,2,3,4,5,6,7,8]

>>> write_txt(l1, 'wtest.txt', sep=',')

[ 파일 저장 완료 ]

=================================================

'wtest.txt'

1,2,3,4,5,6,7,8


3. 리스트 내용을 파일로 저장(2차원 리스트)

def write_txt(list, fname, sep) :

    file = open(fname, 'w')

    vstr = ''

    

    for a in list :

        for b in a  :     

            vstr = vstr + str(b) + sep

        vstr = vstr.rstrip(sep)  # 마지막에도 추가되는  sep을 삭제 

        vstr = vstr + '\n'

    

    file.writelines(vstr)          # 한 라인씩 저장 

        

    file.close()

    print('[ 파일 저장 완료 ]')

================ RESTART: D:/Aaron/Q.py ================

>>> l1 = [[1,2,3,4],[5,6,7,8]]

>>> write_txt(l1, 'wtest.txt', sep=',')

[ 파일 저장 완료 ]

=================================================

'wtest.txt'

1,2,3,4

5,6,7,8


4. 리스트 내용을 파일로 저장(1, 2차원리스트 모두 가능)


5. 리스트 내용을 파일로 저장(불규칙한 크기의 2차원 리스트)




반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday