python 파일 입출력

파일 입출력

open내장 함수 사용시 두번째 인자값으로 mode설정
생략시 읽기전용(r)으로 설정

  1. r -읽기 전용 - 파일 객체를 읽기 모드로 생성, 파일 포인터를 파일 처음 위치로, 존재하지 않는 파일이면 에러발생
  2. w - 쓰기 전용 - 새로운 파일을 생성하거나 기존 파일의 내용을 다 없애고 쓰기모드로 생성, 파일 포인터를 파일 처음 위치로
  3. a - 파일 끝에 추가 - 이미 존재하는 파일을 쓰기모드로 생성하거나 존재하지 않으면 파일 만들고 생성, 파일 포인터를 마지막 위치에 놓음

이진파일 모드

  • rb
  • wb
  • ab

f.close()처럼 close()로 그때그때 닫아주는 것이 좋음

read()를 사용하면 전체를 다 읽어서 할당함

라인단위로 파일 읽기

  1. for 반복문 활용

    1
    2
    3
    4
    5
    6
    f = open('t.txt')
    i = 1
    for line in f:
    print i, ":", line,
    i += 1
    f.close()
  2. readline()-현재의 파일 포인터에서 개행 문자까지 읽음 = 한 라인

    1
    2
    3
    4
    5
    6
    7
    8
    f = open('t.txt')
    line = f.readline()
    i = 1
    while line:
    print i, ":", line,
    line = f.readline()
    i += 1
    f.close()
  3. readlines()-각 라인을 모두 읽어서 리스트로 저장, 메모리는 비효율적으로 사용
    상황별로 다른 동작함 - for in구문: 전체x, 라인별로 가져옴

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    f = open('t.txt')
    print f.readlines() #리스트 나옴

    #파일 포인터를 맨 앞으로
    f.seek(0)

    i = 1
    for line in f.readlines():
    print i, ":", line,
    i += 1
    f.close()
  4. xreadlines() - 메모리 비효율 개선

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    f = open('t.txt')
    print f.xreadlines() #파일객체 자체가 나옴

    #파일 포인터를 맨 앞으로
    f.seek(0)

    i = 1
    for line in f.xreadlines():
    print i, ":", line,
    i += 1
    f.close()

for in 또는 xreadlines() 추천


라인 단위로 쓰는 방법

  1. writelines() - 라인단위로 쓰기 작업

    1
    2
    3
    4
    5
    6
    7
    8
    lines = ['1st line\n', '2nd line\n', '3rd line\n']
    f = open('t1.txt','w')
    f.writelines(lines)
    f.close()

    f = open('t1.txt')
    print f.read() #전체내용 읽음
    f.close()
  2. write() - 임의로 중간에 ‘\n’ 넣어줌

    1
    2
    3
    4
    5
    6
    7
    8
    lines = ['1st line', '2nd line', '3rd line']
    f = open('t1.txt','w')
    f.write('\n'.join(lines))
    f.close()

    f = open('t1.txt')
    print f.read() #전체내용 읽음
    f.close()

기존 파일에 내용 추가

  • a모드 사용
    1
    2
    3
    4
    5
    6
    7
    f = open('removeme.txt', 'a')
    f.write('3rd line\n')
    f.close()

    f = open('removeme.txt')
    print f.read()
    f.close()

파일 내 임의 위치로 접근

  • 순차접근
  • 임의접근
    • seek(n) - 파일의 가장 첫번째 위치에서 n번째 바이트로 포인터이동
    • tell() - 파일 내 현재 포인터 위치를 반환
1
2
3
4
5
6
7
8
9
name = 't.txt'
f = open(name, 'w+') # 읽고 쓰기모드
s = '0123456789asdf'
f.write(s)

f.seek(5)
print f.tell()
print f.read(1)
print f.tell()

sys 모듈의 표준 입출력(모니터) 관련 객체

  • sys.stdout: 표준 입출력
  • sys.stderr: 표준 에러 출력
  • sys.stdin: 표준 입력

표준 출력으로 파일 저장하기

1
2
3
4
5
6
7
8
9
10
import sys

f = open('t.txt','w')
stdout = sys.stdout #표준 출력 저장
sys.stdout = f #파일 객체로 표준 출력 변경
print 'Sample output'
pirnt 'Good'
print 'Good'
f.close()
sys.stdout = stdout #표준 출력 복원
Comments