Python 기초07

Doya·2025년 2월 11일

ESTSOFT_AI개발7기

목록 보기
8/43

개요

  1. if __name__ == __main__:
  2. 표기법
  3. 파일 입출력
  4. list와 for문 보충 실습

python 메인함수

  • Python에서 main함수는 따로 존재하지 않음
  • if __name__ == __main__:는 메인 함수 선언을 의미
  • if __name__ == __main__: 아래 코드는 해당 파일이 직접 실행 되어야 실행됨
  • 다른 파일에서 import할때 실행 되지 않도록 방지할 수 있음
  • 모듈화 할 때 유용함
def test():
  kor, eng, total, avg = 0, 0, 0, 0
  message = '결과'
  #kor, eng데이터 input() 형변환 처리 
  kor = int(input('국어점수'))
  kor = int(input('영어점수'))
  total = kor + eng
  avg = total // 2
  if avg >= 70:
    message = '합격'
  else:
    message = '재시험'
  return (total, avg, message)


if  __name__  == '__main__' :
  x,y, z = test()
  print(f'total = {x}')
  print(f'avg = {y}')  
  print(f'message = {z}')  

python에서의 표기법

  • 표기법
    프로그래밍을 할 때 일반적으로 사용되는 명명 표기법
    표기법을 준수하지 않으면 프로젝트에서 유지보수, 인수인계, 라이브러리 사용등 어려움이 생길 수 있음
  • python에서의 함수, 클래스 명명 규칙
  1. 함수, 변수, 속성

    • 스네이크 표기법을 따름
    • 스네이크 표기법: 이름의 띄어쓰기를 언더바로 표기하는 방식
    def sum_xy(x, y):
    
    sum_value = 0
  2. 클래스, 예외

    • 파스칼 표기법을 따름
    • 파스칼 표기법: 단어별 첫 문자를 대문자로 표기하고 이외에는 소문자로 표기
    
    class ClassName
    

프로젝트의 성향마다 바뀔수 있음

파일 입출력

파일

  • 컴퓨터의 저장장치 내 데이터를 저장하기 위해 사용하는 논리적인 단위
  • 하드디스크나 외장 디스크와 같은 저장장치에 저장 한 후 필요할 때 다시 불러서 사용하는 것이 가능

python에서 파일을 사용하기 위한 절차

  1. 파일 열기
  2. 목적에 따라 파일 읽기, 수정 등을 수행
  3. 파일 닫기

python에서 파일을 다루는 함수

open()

  • 파일을 다루는 핵심 함수
  • 파일 이름과 파일 오픈 모드의 인자를 가질 수 있음
  • encoding이라는 인자를 통해 파일의 인코딩 형식 지정 가능
  • 지정된 경로가 없을 경우 디폴트 경로는 파이썬 스크립트 파일이 있는 곳에 저장
  • 파일 열기 모드
    1. r: 읽기 전용 모드
    1. w: 쓰기 전용 모드
    2. a: 추가 모드
    3. x: 파일을 새로 만드는데 사용
  • 이진 파일 or 텍스트 파일 지정 모드
    1. t: 텍스트 파일 형식으로 파일을 열거나 생성
    1. b: 이진 파일 형식으로 파일을 열거나 생성

close()

  • 열린 파일을 닫아줌
  • 최근 python버전에서는 자동을 닫아줘서 안써줘도 되지만 직관성을 위해 작성한는게 좋음

    버퍼(buffer)

  • 임시로 사용되는 기억공간
  • 파일을 효율적으로 쓰기 위해서 일정한 크기만큼의 데이터를 모아 두었다가 한꺼번에 읽거나 쓰는 용도
  • close를 이용하여 버퍼의 내용을 저장공간으로 보내고 버퍼 크기만큼의 메모리는 비워짐

실습

  • 인코딩시 중간에 인코딩을 수정하면 오류가 생길 위험이 있음
path = 'emp.txt'

with open('./data/emp.txt','a', encoding='UTF-8') as myfile:
  name = input('이름입력: ')
  pay = input('급여입력: ')
  myfile.write(name+'\n')
  myfile.write(pay + '\n')


print( path ,'저장 성공했습니다')

path = './data/abc.txt'
file = open('./data/abc.txt', 'r', encoding= 'utf-8') #w+도 가능
data = file.read()
print(data)
print()
file.close() #권장
print(path, '파일읽기 테스트')


# 4교시 실습
path = 'emp.txt'

with open('./data/emp.txt','r', encoding='UTF-8') as myfile:
  data = myfile.read()
  print(data)


print( path ,'파일 출력을 성공했습니다')

import pickle

pickle

  • 텍스트 상태의 데이터가 아닌 파이썬 객체 자체를 파일로 저장하는 것
  • 미리 필요한 부분을 딕셔너리, 리스트 등 저장을 해놓음

pickle.dump()

  • 객체의 직렬화를 위해 사용
  • 객체를 바이트 스트림으로 변환하여 파일에 저장
  • 역직렬화시 pickle.load()사용

직렬화(serialization)

데이터 구조나 객체를 DB나 네트워크 등에서 저장하거나 전송할 수 있게 바이트 형태로 변환하는것
역직렬화는 직렬화된 데이터를 다시 원래의 객체 형태로 복원하는 과정

실습

import pickle

fileName = './data/mydata.pckf'

menu = {
  'name' : 'cake', 
  'price' : 2300,
  'kind' : ['초코', '생크림', '치즈']
}

with open(fileName, 'wb') as myfile:
  pickle.dump( menu, myfile) # dump(대상, 파일명 및 모드)

print('피클 파일 저장 구현')

# 피클 파일 오픈

file = open(fileName, 'rb') # 바인어리에 있는것을 읽겠다
mydata = pickle.load(file)
print(mydata)
print('피클파일 오픈 처리')

파일 처리 시스템 만들기

import pickle
import sys

testPCKF = './data/mydata.pckf'
num = 9
def create_file():
    try:
        # 기존 데이터 불러오기
        with open(testPCKF, 'rb') as myfile:
            data_list = pickle.load(myfile)
    except (FileNotFoundError, EOFError):
        # 파일이 없거나 비어 있으면 빈 리스트 생성
        data_list = []
    
    # 새로운 데이터 입력
    pkel_file = input('내용을 입력하세요: ')
    data_list.append(pkel_file)  # 기존 리스트에 새로운 값 추가
    # 변경된 리스트를 다시 파일에 저장
    with open(testPCKF, 'wb') as myfile:
        pickle.dump(data_list, myfile)

def opem_file():
  file = open(testPCKF, 'rb') # 바인어리에 있는것을 읽겠다
  mydata = pickle.load(file)
  print(mydata)

def end_program():
  sys.exit()

while True:
  print('1. 파일만들기 2.파일열기    9.종료')
  num = int(input('>>>'))
  if num == 1:
    create_file()
  elif num == 2:
    opem_file()
  elif num == 9:
    print('파일처리 종료')
    end_program()

리스트, for문을 이용한 과제

우유 배달 신청 안한 집 리스트 찾기

  • 2차원 리스트

apart = [
  [101, 102, 103, 104, 105], [201, 202, 203, 204, 205], 
  [301, 302, 303, 304, 305], [401, 402, 403, 404, 405]
]

uncheck = [102, 204, 303, 405] # 우유 배달 신청 안한 집 
not_del_list = list()

for row in apart:
  for cul in range(len(apart)+1):
    if row[cul] in uncheck:
      not_del_list.append(row[cul])

print(f'{not_del_list}은 배달하지 않는다')

열데이터 고정, 비고정 리스트 출력

data = [  #3행 * 4열
  [1,2,3,4] ,
  [5,6,7,8] ,
  [9,10,11,12]
]

data2 = [  
   [1, 2, 3, 4 , 5] ,
   [6, 7, 8] ,
   [9,10,11,12, 13],
   [14, 1500, 16, 170]
]

# 열데이터 고정 리스트 
for row in data:
  for cul in range(len(row)):
    print(row[cul], end = '\t')
  print()

print('='* 35)

# 열데이터 비고정 리스트 
for row in data2:
  for cul in range(len(row)):
    print(row[cul], end = '\t')
  print()

출력결과

profile
안녕하세요. 도야입니다

0개의 댓글