Python file

정원·2022년 7월 5일

Python

목록 보기
5/7

22.07.05 file

file_io_write

<script>
'''
* 파일 입/출력

- 프로그램이 생성한 정보를 좀 더 오래 저장할 때는
파일에 기억해야 합니다.

- 메모리(RAM)는 속도는 빠르지만 전원이 끊어지면 정보를 잃어버릴 수
있기 때문에, 하드디스크에 저장해야 데이터를 오래 보관할 수
있습니다.

- 파일은 정보를 저장하는 기본 단위이며
문서, 이미지, 멀티미디어 자료도 모두 파일 형태로 보관할 수
있습니다.

- 파이썬에서는 파일 입/출력을 할 때
open()이라는 함수를 사용합니다.
ex) open('파일 경로', 모드)

- 파일 경로는 입/출력 대상의 파일 경로입니다.
디렉터리 경로를 포함시킵니다.

- 모드는 읽기, 쓰기, 추가 등 무엇을 할 지
결정하는 인수입니다.

- 모드의 종류
1. r: 파일을 읽어들입니다. 읽어들일 파일이 없으면
예외가 발생합니다.

2. w: 파일에 데이터를 저장합니다.
파일이 이미 존재한다면 덮어씁니다.

3. a: 파일에 데이터를 추가합니다. (이미 존재하는 파일에)
파일이 존재하지 않는다면 새롭게 생성도 해 줍니다.
'''
# 파일 입출력은 외부 데이터로 접근하기 때문에
# 예외처리를 통해 안전하게 작성합니다.
try:
    # 파일 저장 기능(write, append)
    # 경로\파일명
    file_path = r'C:\Users\jwons\OneDrive\바탕 화면\java_web_JJW\python\test\test2.txt'

    # 파일 입출력을 실행하는 내장 함수 open()
    # 반환값으로 파일 입출력을 담당하는 객체가 리턴됩니다.
    # 첫번째 인수로 파일 경로를, 두번째 인수로 모드를 설정.
    # f = open(file_path, 'w')
    f = open(file_path, 'a')

    # text = 'w모드는 지정한 경로에 파일을 작성할 때 사용하는 모드입니다.'
    # text = 'w모드를 이용하여 이미 존재하는 파일 경로를 지정하면 덮어 씁니다.'
    # text = 'a모드는 기존에 파일이 존재하는 경우 데이터가 추가됩니다.'
    text = 'a모드는 기존 파일만 지정할 수 있는 것이 아닌 새 파일도 지정이 가능합니다.'

    # 파일을 저장할 때는 f.write() 메서드를 사용합니다.
    # 저장할 데이터를 인수로 전달합니다.
    f.write(text)
    print('파일 저장 완료!')
except:
    print('파일 저장 실패!')
finally:
    # 파일 입출력은 하드디스크 자원을 사용하는 코드이므로
    # 반드시 사용 후 그 자원을 해제하여 메모리 누수를 방지해야한다.
    f.close()
</script>

file_write_quiz

<script>
'''
* 사용자의 입력을 파일(xxx.txt)에 저장하는 프로그램을 작성하세요.
(, 프로그램을 다시 실행하더라도 파일명이 동일하다면
기존 작성한 내용을 그대로 유지하고
새로 입력된 내용이 추가되어야 합니다.
파일명도 마지막에 입력받아서 생성하세요.)
'''
print("저장할 내용을 입력('그만'이라고 입력 시 종료됩니다.")
user_input = ''
while True:

    temp = input('> ')
    if temp == '그만':
        break    

    user_input += temp + '\n'
    
file_name = input('파일명을 입력: ')
file_path = f'C:/Users/jwons/OneDrive/바탕 화면/java_web_JJW/python/test/{file_name}.txt'
    
try:
    f = open(file_path, 'a')
    f.write(user_input)
    print('파일 저장 성공!')
except:
    print('파일 저장 실패!')
</script>

file_io_read

<script>
'''
* 파일 읽기 기능(read)

- 파일로부터 데이터를 읽어들일 떄는 분량에 따라
적당한 메서드를 선택해서 사용합니다.

1. read(): 파일 전체를 통째로 읽어서 문자열로 리턴
2. readline(): 파일 데이터를 한 줄씩 읽어서 리턴.
3. readlines(): 파일 전체를 읽어서 한 줄씩 분리한 후에 리스트에 담아서 리턴.
'''
file_path = r'C:\Users\jwons\OneDrive\바탕 화면\java_web_JJW\python\test\talk.txt'

try:
    f = open(file_path, 'r')
    text = f.read() # 파일 전체 통째로 읽기
    print(text)
except:
    print('파일 로드 실패')
finally:
    f.close()

# readline() 메서드는 자동으로 \n을 기준으로 하여
# 데이터를 줄 단위로 읽어들이기 때문에 메모리 부담을 좀 더 줄일 수 있습니다.
try:
    f = open(file_path, 'r')
    while True:
        text = f.readline()
        print(text)

        if len(text) == 0: # 더이상 읽어들일 데이터가 없다면 break
            break
except:
    print('파일 로드 실패')
finally:
    f.close()

# readlines()는 파일 데이터를 한 줄씩 읽어서 
# 리스트에 담아서 리턴하기 때문에 읽은 데이터를
# 리스트 문법을 사용해서 처리할 수 있습니다.
try:
    f = open(file_path, 'r')
    text = f.readlines()
    text.reverse() # 역순
    for t in text:
        print(t) # 한 행씩 출력
except:
    print('파일 로드 실패')
finally:
    f.close()
</script>

file_read_quiz

<script>
'''
* points.txt 파일의 숫자값을 모두 읽어서
총합과 평균을 구한 뒤
총점, 평균값을 result.txt라는 파일에
쓰는 프로그램을 작성해 보세요.
'''

import traceback as trace # 자바의 printStackTrace

file_path = r'C:\Users\jwons\OneDrive\바탕 화면\java_web_JJW\python\test\points.txt'

try:
    f = open(file_path, 'r')
    numlist = f.read().split() # 파일 읽어서 공백기준으로 split
except:
    print('파일 로드 실패')
    print(trace.format_exc()) # 자바의 printStackTrace
finally:
    f.close()

sum = 0
for num in numlist:
    sum += int(num) # String -> int 

avg = sum / len(numlist)

try:
    file_path2 = r'C:\Users\jwons\OneDrive\바탕 화면\java_web_JJW\python\test\result.txt'
    f = open(file_path2, 'w')
    data = f'총점: {sum}점, 평균: {avg:0.2f}점'
    f.write(data)
    print('파일 저장 완료')
except:
    print('파일 로드 실패')
finally:
    f.close()
</script>

0개의 댓글