본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

SK 네트웍스 AI 캠프

SK 네트웍스 AI 캠프 - 1_프로그래밍 데이터 기초 - Day4_파일입출력_예외처리

 

여러줄 문자열 사용시 따옴표를 3개사용 or  \n시 줄바꿈

w모드 생성, x도 생성 다만 덮어쓰기 방지

a모드 수정

r 모드 열기

 

 

. 현재 디렉토리

../ 부모 디렉토리

 

 

텍스트 기본 인코딩은 os를 따르고 ms949로 저장되기 때문

 

 

 

한글은 utf-8

 

 

 

"""세번반복시 줄바꿈을 인식한다.

import os

def test_fwrite():
    f=open('testa.txt', 'w', encoding='utf-8')
    f.write(
"""hello world 안녕 ?! ★
줄바꿈 테스트입니다.
""")
    f.write(
'\n혹은 이렇게 줄바꿈 하던가\n줄바꿈 테스트입니다.')

 

 

 

 

무한루프시 서비스가 다운될 가능성이 높아지나, 

Python에서는 이 무한루프에 대해 종료 서비스를 가지고있다.

while(true):

 

 

whild문 실습

 

 

 

 

 

조건문 실습

 

 

 

w 모드 덮어쓰기 작성 

while과 if을 사용해 간단 프로그램 만들기

 

 

 

 

 

x 모드 덮어쓰기가 불가능하다.
경로지정시 이스케이프문자를 \\ 두번씩 입력한다.

 

 

a 모드 append

 

 

 

 

 

os모듈

os.getlogin 사용자이름

os.getcwd 현재 경로

os.listdir 현재 모든 파일목록

os.mkdir 폴더생성

os.chdir 폴더이동

def test_osmodule():
    system_user = os.getlogin() # 사용자 이름
     
     
    print(system_user+'의 현재 위치는'+os.getcwd()+'입니다.') # 현재 위치
    print(os.listdir()) # 현재 위치의 모든 파일 목록
    
    work_dir = 'D:\\study\\sk_playdata\\study_ai\\python_workspace\\day4_python_fileio\\folder'
    os.mkdir(work_dir) # 새로운 폴더 생성

    os.chdir(work_dir) # 새로운 폴더로 이동
    print(system_user+'의 현재 위치는'+os.getcwd()+'입니다.') # 현재 위치
    print(os.listdir()) # 현재 위치의 모든 파일 목록

    f = open('sample.txt', 'w', encoding='utf-8') # 새로운 파일 생성
    f.write('새로운 파일을 작성하였습니다.')
    f.close()
    print(os.getcwd()+'에 새로운 파일이 저장되었습니다.')

 

 

 

 

read() 모두 읽기

readline() 한줄씩 읽기

readlines() 라인 리스트로 읽기

def test_r(r_mode):
    f=open('testc.txt', 'r',  encoding='utf-8')
    if r_mode  == 'r':
        print(f.read())
    elif r_mode == 'rl':
        while True:
            line = f.readline()
            if not line:
                break
            print(line)
            user_input = input('다음 라인을 읽으시겠습니까? (y/n)')
            if user_input == 'y':
                continue
            else:
                break

    elif r_mode == 'rls':
        print(f.readlines())

 

 

 

 

 

 

writelines()

리스트로 작성하기

 

 

 

 

파이썬의 기본 이비출력은 텍스트 파일이고 외의 자료형의 파일을 다룰때는 pickle 모듈을 활용함

pickle로 작성된경우 pickle로 읽는게 젤 마음편함
dat등의 확장자는 vscode에서 조회되지않음

 

 

 

노트패드 다운해 억지로열어봐도 깨질것임. 이진수이기때문.

https://notepad-plus-plus.org/downloads/

 

Downloads | Notepad++

 

notepad-plus-plus.org

https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.9.4/npp.8.9.4.Installer.x64.exe

 

 

 

다운완료.

 

 

dat 파일 열람가능

 

 

 

 

플러그인을 추가할 수 있지만 깨진 곳을 해석해줄뿐, 번역해주지는 않음

 

 

 

 

 

 

os.path.abspath(file) 파일경로찾기

os.path.exists(filepath) 파일존재확인

os.path.basename 파일이름만 추출

os.path.split() 폴더와 파일 모두 나누어 추출

os.path.splitdrive()[0] 드라이브명만 추출

os.path.splitdrive()[1] 확장자 제외하고 추출

os.path.dirname() 폴더위치 추출

 

 

 

 

 

사전자료, dictionay

list, tuple과 다르게 인덱스 사용할 수없지만 key, value를 사용할 수 있다 .

dict() 혹은 {}로 생성한다.

 

 

 

 

 

key와 value의 쌍으로,

여러 자료형을 묶어 사전을 만들 수 있다.

 

 

 

값추가시 없는 key를 활용해 추가하면 된다.

다만 '이미있는 key'에서의 추가를 헷갈리지말자.

 

 

 

 

 

keys(), values(), items()를 호출해 각각 출력할수 있다.

 

 

 

 

 

사전1.update(사전2)

사전과 사전은 합쳐질 수 있으나 겹칠경우, 대입되는(사전2)의 값이 (사전1에) 반영된다

 

 

 

pop() 키에 대한 아이템을 제거하고 반환함

 

 

 

 

 

clear() 딕셔너리 안을 모두 비움

 

 

 

 

copy() 딕셔너리 객체를 새로 만들어 아이템을 복사한다. deep copy

 

 

 

 

주소를 활용한 복사와 헷갈리지 않는다, shallow copy

 

 

 

키 in 사전

해당 키가 딕셔너리에 있는가를 확인 할 수 있음

 

 

 

 

 

value in 사전.values()

반대로 값으로 확인할 수 있다. 

 

 

 

 

get.()을 활용하면 에러없이 값의 유무를 확인 할 수 있다. 

 

 

 

del 아이템 제거

 

 

 

+

과제수행

더보기


5월 4일 과제 있습니다.
완성된 과제는 본인의 개인 Git 에 업로드 하시고, 
git 의 프로젝트 소스 공유 url 을 강의실 실시간 채널에 url 만 제출해 주세요.

[파이썬 과제 1]
프로젝트명 : python_assignment1

프로젝트 구조 : 
 |- .venv
 |- main.py
 |- loop
|- while_mission.py
 |- fileio
|- fileio_mission.py

실행 흐름 : 
 main start -> menu() 함수 실행 : while 루프로 프롬프트 반복
 
 prompt = '''
*** 파이썬 과제 1 ***
1. while 실습문제
2. fileio 실습문제
9. 과제 실행 테스트 끝내기
 '''
 
 # while 문 실습문제 요구사항 ---------------------------------------------------------
 # path : loop\\while_mission.py
# module : loop.while_mission

'''
함수명 : sungjuk_process()
prompt 변수를 while 문으로 반복해서 출력하면서, 입력되는 번호에 따라
sungjuk_list 의 아이템을 추가하거나 삭제하거나 출력되게 작성하시오.

sungjuk_list = [[12, '홍길동', 98], [15, '김유신', 87], [23, '황지니', 45]]
prompt = '''
            *** 원하는 메뉴 번호를 선택하세요. ***
            1. 추가
            2. 삭제
            3. 출력
            4. 끝내기
        '''

1 입력 : 리스트에 아이템 값들을 입력받아 추가함
  번호 : 24 (sno : int)
  이름 : 이순신 (sname : str)
  점수 : 100 (score : int)
  ==> 리스트에 추가 처리함    ==> 새로운 학생정보가 추가되었습니다.  출력함
2 입력 : 리스트의 인덱스 위치의 아이템 제거함
  현재 저장된 아이템의 갯수는 3개 입니다.  출력함
  제거할 아이템의 순번 : 3    ==> 입력받은 인덱스 위치의 아이템 제거함
  ==> 3번 위치의 아이템이 제거되었습니다.  출력함   ==> 현재 저장된 아이템의 갯수는 2개 입니다.  출력함
  ==> 잘못된 인덱스 입력시 :   '순번이 잘못 입력되었습니다. 확인하고 다시 입력하세요.' 출력함
3 입력 : 저장된 리스트 정보 아이템별로 출력함
  0 : [12, '홍길동', 98]
  1 : [15, '김유신', 87]
  2 : .......
4 입력 : while 반복 종료함
  성적관리 프로그램이 종료되었습니다.  출력함
'''

# ----------------------------------------------------------------------
# path : fileio\\fileio_mission.py
# module : fileio.fileio_misson

# 파일입출력, 반복문, 리스트, 딕셔너리 사용 실습문제 요구사항
'''
while 문을 사용해서 prompt 가 반복해서 출력되도록 함
입력된 번호에 따라서 emp_list 에 아이템 추가, 삭제, 출력 처리하도록 함

prompt = '''
        *** 직원 정보 관리 서비스 ***
        1. 새 직원정보 추가
        2. 직원정보 삭제
        3. 전체 출력
        4. 파일에 저장
        5. 파일로 부터 직원정보 읽어오기
        9. 서비스 끝내기
        '''

1 이 입력되면 리스트에 추가할 아이템 정보를 키보드로 입력받아서 추가함
  사번 : 200 (empid : str)
  이름 : 홍길순 (empname : str)
  주민번호 : 851225-1234567 (empno : str)
  이메일 : hong77@test.com (email : str)
  전화번호 : 010-1234-5678 (phone : str)
  급여 : 3800000 (salary : int)
  직급 : 대리 (job : str)
  부서 : 개발부 (dept : str)
  => 사번은 키로 해서 딕셔너리에 직원정보를 리스트로 저장함
     사번 : [사번, 이름, 주민번호, 이메일, 전화번호, 급여, 직급, 부서]
2 입력시 :
    삭제할 사번 : 200
    => 딕셔너리에서 해당 사번의 아이템 제거함
    => '200 번 사번의 직원 정보가 삭제되었습니다.' 출력함
3 입력시 :
    딕셔너리의 각 아이템의 정보를 한줄씩 출력되게 함
    사번 : [리스트 정보]
    사번 : [리스트 정보]
    ....
4 입력시 :
    딕셔너리 상태 그대로 파일에 저장되도록 함
    저장할 파일명 : employees.dat
    ==> 'employees.dat 파일에 성공적으로 저장되었습니다.' 출력됨
5 입력시 :
    읽을 파일명 : employees.dat
    => 파일의 내용을 읽어서 딕셔너리(emp_dict)에 저장하고 출력되게 함
9 입력시 :
    while 문 끝내면서 프로그램 종료되게 함
    => 종료시 '직원 관리 프로그램을 종료합니다.' 출력함

함수명 : emp_process()
'''

python -m venv .venv

 

 

프로그램 종료

 

 

서비스 진입

 

 

추가 테스트

 

 

 

삭제 테스트

 

 

 

while 프로그램 종료

 

 

 

 

서비스 진입

 

 

 

데이터 입력

 

 

 

데이터 삭제

 

 

 

데이터 출력

 

 

 

데이터 저장

 

 

 

파일읽기

서비스 끝내기

서비스 끝내기

 

 

 

 

완료.