파이썬 기초 5-2. 파이썬 프로그래밍 - 간단한 메모장 만들기 와 탭을 4개의 공백으로 바꾸기, 하위 디렉토리 검색하기

MANBOKWAK·2024년 1월 19일

파이썬 기초

목록 보기
13/15

간단한 메모장 만들기

목적

  • 원하는 메모를 파일에 저장하고 추가 및 조회가 가능한 간단한 메모장을 만들어보자

구성

  • 기능 : 메모 추가하기, 메모 조회하기

  • 입력받는 값 : 메모 내용, 프로그램 실행 옵션

  • 출력하는 값 : memo.txt 처럼 txt파일 생성

python memo.py -a "Life is too short"
  • 위와 같이 커맨드라인에서 입력했을때 입력한 내용이 메모에 추가되어여 한다

내가 작성한 코드

import sys

if sys.argv[1] == "-a":
    with open("memo.txt", "a") as f:
        f.write(sys.argv[2] + "\n")
elif sys.argv[1] == "-v":
    with open("memo.txt", "r") as f:
        print(f.read())

출력화면

  • 커맨드라인에서의 입력된 값을 활용해야되므로 sys 모듈을 사용했음

  • 모드가 -a이면 파일을 a(추가) 모드로 켜서 argv[2] 내용을 파일에 추가한다

  • 모드가 -v라면 파일을 읽기 r(읽기) 모드로 켜서 파일에 저장된 내용을 출력한다

  • 모범답안과 동일하므로 모범답안은 따로 짚고 넘어가지 않음.


탭을 4개의 공백으로 바꾸기

목적

  • 문서 파일을 읽어서 그 문서 파일 안에 있는 tab을 space4개로 바꾸어 주는 스크립트를 작성해보자

구성하기

  • 필요한 기능 : 문서 파일 읽어 들이기, 문자열 변경하기

  • 입력받는 값 : 탭을 포함한 문서 파일

  • 출력하는 값 : 탭이 공백으로 수정된 파일

  • 형식 : python tabto4.py src dst 형식으로 사용 (tabto4.py 파일이름, src 원본 파일, dst 수정 파일)

내가 작성한 코드

import sys

src = sys.argv[1]
dst = sys.argv[2]

with open(src) as f:
    rm_tamp = f.read()

space_content = rm_tamp.replace("\t", " "*4)
print(space_content)
with open(dst, 'w') as f:
    f.write(space_content)
  • src를 열어 파일의 내용을 읽어와 rm_tamp에 저장한 후 space_content에 tab을 공백4개로 변환한 내용을 저장하고 dst파일을 열어 그 내용을 저장하는 방식으로 파일을 작성했음

  • 모범답안과 거의 동일한 코드이므로 따로 짚지않고 넘어감


하위 디렉토리 검색하기

목표

  • 특정 디렉토리 부터 시작해서 그 하위 모든 파일 중 파이썬 파일만 출력해주는 프로그램을 만들자

①. sub_dir_search.py 초안 작성하기


def search(dirname):
	print(dirname)
    
serach("C:/")
  • search함수를 만들고 시작 디렉토리를 입력받도록 코드를 작성했음

②. 디렉토리에 있는 파일을 검색할 수 있도록 코드를 수정

import os

def search(dirname):
    filenames = os.listdir(dirname)
    for filename in filenames:
        full_filename = os.path.join(dirname, filename)
        print(full_filename)
        if os.path.isdir(full_filename):
            search(full_filename)

search("C:\\~~~작업중인 레포지토리~")

출력화면

③. 확장자가 .py인 파일만 출력하도록 하기

import os

def search(dirname):
    filenames = os.listdir(dirname)
    for filename in filenames:
        full_filename = os.path.join(dirname, filename)
        print(full_filename)
        ext = os.path.splitext(full_filename)[-1]
        if ext == '.py':
            print(full_filename)

search("C:\\Users\\PCD-178\\Desktop\\study")
  • 파일 이름에서 확장자만 추출하기 위해서 os모듈의 so.path.splitext를 사용했음, splitext는 파일 이름을 확장자를 기준으로 두 부분으로 나누어줌

④. 하위 디렉토리속 파일들까지 탐색하도록 코드를 수정

import os

def search(dirname):
    try:
        filenames = os.listdir(dirname)
        for filename in filenames:
            full_filename = os.path.join(dirname, filename)
            if os.path.isdir(full_filename):
                search(full_filename)
            else:
                ext = os.path.splitext(full_filename)[-1]
                if ext == '.py':
                    print(full_filename)
    except PermissionError:
        pass

search("C:\\Users\\PCD-178\\Desktop\\study")

search("C:\\Users\\PCD-178\\Desktop\\study")
  • 함수속 코드들을 try.. exception.. 문으로 깜싼 이유는 권한이 없는 디렉토리에 접근하더라고 오류가 발생하지 않도록 하기위해서임

  • full_filename이 디렉토리인지 파일인지 구별하기위해서 os.path.isdir함수를 사용했음 디렉토리인 경우에는 search함수를 재귀 호출해 하위 디렉토리를 다시 호출하게 했고, 파일이면 .py인경우만 출력하도록 했음

profile
Backend/ DevOps를 지망하는 곽희상입니다.

0개의 댓글