티스토리 뷰

이제까지 ‘입력’받을 때는 사용자가 직접 입력하는 방식을 사용했고 ‘출력’할 때는 모니터 화면에 결과값을 출력하는 방식을 사용했다. 하지만 입출력 방법이 꼭 이것만 있는 것은 아니다.
이번에는 파일을 통한 입출력 방법에 대해 알아보자.

파일 데이터 읽기

  1. 파일을 연다. open('경로/파일명','모드')
  2. 파일에서 데이터를 읽거나 쓸 수 있다. (모드 ='w,r,a')
  3. 파일과 관련된 작업이 모두 종료되면 파일을 닫는다. f.close()

1.파일 생성하기

  • 파일의 경로 읽기 - 중요
    • ./ : 파일명 또는 파일명은 같은 디렉토리
    • ../ : 상위 디렉토리
    • ./폴더명/파일명 또는 폴더명/파일명: 하위 폴더의 파일
    • / : root 루트- 최상위 폴더라고 지정
# newfile.py
f = open("새파일.txt", 'w')
f.close()
파일모드 모드이름 설명
r 읽기모드 파일을 처음부터 읽는다.
w 쓰기모드 파일의 처음부터 쓴다. 파일이 없으면 생성된다.
만약 파일이 존재하면 기존의 내용은 지워진다.
a 추가모드 파일의 끝에 쓴다. 파일이 없으면 생성된다.
r+ 읽기와 쓰기 모드 파일에 읽고 쓸 수 있는 모드이다. 
모드를 변경하려면 seek()가 호출되어야 한다.

현재 작업 경로 확인

pwd()
import os  # os 모듈을 가져옴 (운영 체제 관련 작업을 위한 모듈)

# 현재 작업 디렉토리를 반환
os.getcwd()
#colab에서 디렉토리에서 content/생성
f = open('./new.txt','w')
f.close()
f = open('new01.txt', 'w')
f.write('안녕하세요. 첫줄')
f.close()

with 구문을 사용 해 보자.

# 'new02.txt' 파일을 쓰기 모드('w')로 열어서 내용을 작성
# 'w' 모드는 파일을 새로 생성하거나 기존 파일의 내용을 지운 뒤 작성함
with open('new02.txt', 'w') as f:
    f.write('안녕하세요. 파일에 처음부터 쓰는 내용')

# 'new02.txt' 파일을 추가 모드('a')로 열어서 새로운 내용을 추가
# 'a' 모드는 기존 파일 내용 뒤에 이어서 작성함
with open('new02.txt', 'a') as f:
    f.write('\n두번째 줄입니다.')  # 새로운 줄에 두 번째 내용을 추가

파일을 쓰기 모드로 열면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고 해당 파일이 존재하지 않으면 새로운 파일이 생성된다.

2.파일을 쓰기 모드로 열어 내용 쓰기

# 'new4.txt' 파일을 쓰기 모드('w')로 열기
# 파일이 이미 존재한다면 내용을 모두 지우고 새로 시작한다
with open('new4.txt', 'w') as f:
    # 1부터 10까지 반복
    for i in range(1, 11):
        # 각 번호 뒤에 '번째 줄입니다.'라는 문자열과 줄바꿈 문자 '\n'를 추가하여 파일에 쓴다
        f.write(f'{i}번째 줄입니다. \n')

3.파일을 읽는 여러가지 방법

파이썬에는 파일을 읽는 방법이 여러 가지 있다. 이번에는 그 방법을 자세히 알아보자.

read() - 파일에 모든 줄을 읽어 드림

  • f.read()는 파일의 내용 전체를 문자열로 리턴한다.
with open('rTest.txt','w') as rf:
    rf.write('김길동 01012345678 \n')
    rf.write('고길동 01012345678 \n')
    rf.write('홍길동 01012345678 \n')
with open(r'rTest.txt','r') as rf:
    data = rf.read()
    print(data)

readlines() : 파일에 모든 줄 한 줄로 읽어드림

readline(): 파일에서 한번에 한 줄씩 읽어오기

  • 새파일.txt 파일의 가장 첫 번째 줄이 화면에 출력될 것이다.
with open('rTest.txt','r') as rf:
    data1 = rf.readline()
    print(data1)

만약 모든 줄을 읽어 화면에 출력하고 싶다면 다음과 같이 작성하면 된다.

  • while True: 무한 루프 안에서 f.readline()을 사용해 파일을 계속 한 줄씩 읽어 들인다. 만약 더 이상 읽을 줄이 없으면 break를 수행한다(readline()은 더 이상 읽을 줄이 없을 경우, 빈 문자열('')을 리턴한다).
with open('rTest.txt','r') as rf:
    while True:
        line = rf.readline()
        if not line:
            break
        print(line.strip())
with open('rTest.txt','r') as rf:
    for line in rf:
        print(line.strip())

strip() 메서드 사용:

  • line.strip()은 문자열의 양쪽 끝에 있는 공백 문자(\n, \t 등)를 제거한다.
  • 이를 통해 한 줄씩 읽을 때 추가적인 빈 줄이나 개행 문자를 없앤다.

4.추가 내용 작성('a'모드)

  • 쓰기 모드('w')로 파일을 열 때 이미 존재하는 파일을 열면 그 파일의 내용이 모두 사라지게 된다.
  • 하지만 원래 있던 값을 유지하면서 단지 새로운 값만 추가해야 할 경우도 있다. 이런 경우에는 파일을 추가 모드('a')로 열면 된다.
with open('rTest.txt','a') as af:
    af.write('마길동 01012345678\n')

5.CSV(comma Separated Value) 파일 사용하기

  • CSV? : 데이터를 저장하고 이동하는 데 사용하는 구조화된 파일 형식
  • 열(field)과 레코드(record)를 나타내는 행으로 구성
  • 레코드의 필드는 대게 쉼표로 구분(어떤 구분자도 사용 가능)
  • 첫번째 레코드에는 열 제목이 포함되어 있을 수 있다. (열제목을 제거 할 수 있다.)
  • CSV 라이브러리를 사용
import csv  # csv 모듈을 가져옴 (CSV 파일 읽기 및 쓰기를 위한 모듈)

# 'sText.csv' 파일을 읽기 모드('r')로 열기
with open('sText.csv', 'r') as ef:
    data = csv.reader(ef)  # csv.reader를 사용하여 파일을 CSV 형식으로 읽음
    for line in data:  # 파일에서 한 줄씩 반복
        print(line)  # 각 줄(리스트 형태)을 출력
with open('sText.csv', 'r') as sf:
    data = csv.reader(sf)
    for line in data:
        print(','.join(line)) #문자열로 변경

연습문제 ; 서울의 기상정보

  1. csv 파일을 읽어보자
  2. 헤더를 제거 해 보자
  3. 반복문을 이용하여 데이터를 읽어보자
  4. 언제 가장 추웠는지 조사 해 보자
  5. 서울의 최저기온을 찾아보자

weather.csv
0.40MB

  1. csv 파일을 읽어보자
import csv

with open('weather.csv', 'r') as f:
    data = csv.reader(f)
    for row in data:
        print(row)

next() 함수 사용 : 첫줄 건너뜀

import csv

with open('weather.csv', 'r') as f:
    data = csv.reader(f)
    header = next(data)
    for row in data:
        print(row)

언제 가장 추웠는가? -19.2

import csv

with open('weather.csv', 'r') as f:
    data = csv.reader(f)
    header = next(data)

    temp = 100
    for row in data:
        if temp > float(row[3]):
            temp = float(row[3])
    print(temp)

Date,High Temp,Low Temp,Avg Temp
2023-11-20,20,10,15
2023-11-21,22,8,13
2023-11-22,19,9,14
2023-11-23,18,7,12
2023-11-24,17,6,16

최고 기온의 날짜는?

import csv
with open('wth2.csv','r') as f:
    data = csv.reader(f)
    header = next(data)
    max_temp = 0
    max_temp_date = ''
    for row in data:
        if float(row[3]) > max_temp :
            max_temp = float(row[3])
            max_temp_date = row[0]
print(f'평균온도가 최고인 날짜는 {max_temp_date}날 {max_temp}이다.')

문제2.참석자 명단을 입력 받은 파일을 출력 해 보자.

with open('guest.txt', 'w') as f:  # 파일 이름을 'guest.txt'로 통일
    while True:
        name = input('name: ')  # 사용자로부터 이름 입력
        if not name:  # 빈 입력이 들어오면 종료
            break
        print(f'{name} 학생 환영해요')  # 환영 메시지 출력
        f.write(name + '\n')  # 파일에 이름 저장 (줄바꿈 포함)

# 저장된 이름 파일을 읽어 총 학생 수 출력
with open('guest.txt', 'r') as f:
    lines = f.readlines()  # 파일의 모든 줄 읽기
    cnt = len(lines)  # 줄 수로 학생 수 계산
    print(f'total: {cnt}명')  # 총 학생 수 출력
import csv

with open('data.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['Name', 'Age', 'City'])
    writer.writerow(['Alice', 25, 'New York'])
    writer.writerow(['Bob', 30, 'San Francisco'])
    writer.writerow(['Charlie', 35, 'Los Angeles'])
728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
반응형