[패스트캠퍼스python] 파일 읽기

파이썬 인강 : 파일 읽기

txt파일로 읽거나 쓸 줄 알아야 어플리케이션을 만들었을때 중요한 데이터(결과값)을 저장해놓을 수 있다

  • 읽기 모드 r
  • 쓰기 모드 w : 기존 파일 삭제
  • 추가 모드 a : 파일 생성 또는 추가
  • 상대 경로(‘../‘, ‘./‘)
  • 절대 경로 확인(‘C:...’)

참고 링크

중요한 데이터.txt 파일을을 어떻게 읽을 수 있을까?

1. open()과 close() 방법

파일을 열때는 open()을 사용하고 읽어올 것이기때문에 r을 쓰면 된다
open()했으면 반드시 close 리소스 반환해줘야한다. 즉 close()로 꼭 문 닫아줘야한다.
한 번 사용한 리소스를 꼭 닫아줘야한다.

1
2
3
4
5
f = open('./resource/중요데이터.txt', 'r')
contents = f.read()
print(contents)

f.close()

2. with open()방법

파이썬에서는 open()해놓고 close()는 하지않아도 되는 방법이 있다
바로 with문!

1
2
3
4
5
with open('./resource/중요한데이터.txt', 'r') as f:
c = f.read()
print(iter(c)) #iterator함수로 변환하여 for문에서 사용가능
print(list(c)) #리스트형변환가능
print(c)

read는 전체 내용 읽어준다 ex) read(10) : 10글자 읽기

3. with문과 for문 활용

1
2
3
with open('./resource/중요한데이터.txt', 'r') as f:
for c in f:
print(c)

with문과 for문 출력값

출력값을 보면 한 줄씩(line단위) 출력해준다
한줄씩 뛰어쓰기되어 나오는 것은 끝에 |n이 들어가있기때문이다
제거해주려면 어떻게 하면 될까?

1
2
3
with open('./resource/중요한데이터.txt', 'r') as f:
for c in f:
print(c.strip())

|n 입력후 출력

|n을 strip()으로 제거해주면 가독성 좋게 출력된다
위의 출력이미지와 아래의 출력이미지를 보면 가독성이 좋아진 것을 알 수 있다

4. read VS readline VS readline(문자수) VS readlines

  • read : 처음글자부터 끝까지 전체를 다 읽기. read()가 끝나고 나면 커서가 맨 마지막 글자에 있기때문에 한번 출력 후 read()를 또 출력하면 빈 내용이 출력된다
  • readline : 한 줄씩 읽기
  • readline(문자수) : 문자수 읽기
  • readlines : 전체 읽은 후 라인 단위 리스트 저장

응용한 예시를 함께보자
아래 이미지파일과 같은 score.txt파일이 있고 안의 내용의 평균을 for line in으로 구해보자

score.txt파일

1
2
3
4
5
6
7
8
9
10
11
with open('./resource/score.txt', 'r') as f:
score = []
for line in f:
score.append(int(line))
print(score)
print('Average : {:6.3f}'.format(sum(score) / len(score)))
#{6자리고 소수셋째자리까지라는 의미}

# 출력값
[95, 78, 92, 89, 100, 66]
Average : 86.7

5. 파일 쓰기

  1. 빌트인패키지인 random을 이용해서 파일을 써보자
    로또번호와 비슷하게 6개 랜덤번호를 출력하는 예제이다.
1
2
3
4
5
6
7
from random import randint
#랜덤파일로부터 randint함수를 가져와라는 뜻

with open('test2.txt', 'w') as f:
for cnt in range(6): # range(6)은 0~5까지임.
f.write(str(randint(1, 50))) # 1부터50까지
f.write('\n')
  1. writelines : 리스트 -> 파일로 저장

    1
    2
    3
    with open('test3.txt', 'w') as f:
    list = ['Kim\n', 'Park\n', 'Lee\n']
    f.writelines(list)
  2. print로 바로 저장하는 예제이다

    1
    2
    3
    with open('./resource/test3.txt', 'w') as f:
    print('Test Contents!', file=f)
    print('Test Contents!!', file=f)