2 minute read

🖊️1번: 필요한 총 페이지 수를 알려주는 프로그램

  • 기능

    • 게시물의 총 건수와 한 페이지에 보여줄 게시물 수를 입력으로 주었을 때 총 페이지수를 리턴하는 프로그램
    • 입력 : 총 건수(m), 한 페이지에 보여줄 게시물 수(n). 단, n >= 1
    • 출력 : 총 페이지 수
  • 코드

# 게시판 프로그램 - 필요한 총 페이지 수를 알려주는 프로그램

# 게시물 총 건수(m)와 한 페이지에 보여줄 게시물 수(n)를 입력받아 총 페이지 수를 리턴해주는 함수 정의
def getPage(m, n): 
    page, remainder = divmod(m, n) # divmod 함수를 통해 입력받은 수 m을 n으로 나눈 몫과 나머지를 각각 변수에 저장함 
    if remainder > 0: # 만약 0으로 나누어 떨어지지 않는 경우 페이지 수를 하나 더해줌
        page += 1 
    return page  # 총 페이지 수를 결과값으로 리턴

print("필요한 총 게시판페이지 수를 알려주는 프로그램입니다.\n")    # 프로그램 설명
a = int(input("게시물 총 건수를 입력해주세요: "))        # 게시물 총 건수, 게시물 수를 입력받음
b = int(input("한 페이지에 보여줄 게시물 수를 입력해주세요: "))

result = getPage(a, b)    # getPage 함수 호출하여 결과값 출력 
print(result)
  • 실행결과
필요한 총 게시판페이지 수를 알려주는 프로그램입니다.

게시물 총 건수를 입력해주세요: 101
한 페이지에 보여줄 게시물 수를 입력해주세요: 6
17

🖊️2번: 탭을 4개의 공백으로 바꾸는 프로그램

  • 기능

    • 문서 파일 내에 있는 Tab을 공백 네 개로 바꾸는 프로그램
    • 리눅스나 유닉스에서는 파이썬 프로그램을 vi 에디터를 이용하여 작성하는데 들여쓰기를 항상 탭으로 한다.
      그런데 이 소스파일을 문서화시킬 때 탭 사이즈가 8 이어서 읽기에 좀 불편했었다.
  • 코드

# 탭을 4개의 공백으로 바꾸는 프로그램

# re모듈, sys모듈을 import
import re 
import sys 

# 사용자에게 사용법(양식) 설명, sys.argv[0]은 프로그램 이름
def Usage(): 
    print("Usage: python %s filename" % sys.argv[0]) 

# 사용자가 입력한 파일(sys.argv[1])을 오픈.
# 없다면 예외처리로 usage()함수를 호출한 뒤 
try: 
    f = open(sys.argv[1]) 
except: 
    Usage() 
    sys.exit(2) 

msg = f.read() 
f.close()       # 파일을 읽어 하나의 문자열로 인식해 msg에 저장후 닫기

p = re.compile(r'\t')   # re모듈에서 complie함수를 사용하여 탭을 모두 찾아 p에 저장
changed = p.sub(" "*4, msg) # sub함수를 사용하여 탭(msg)을 4개의 공백으로 교환하여 changed에 저장

f = open(sys.argv[1], 'w') 
f.write(changed) 
f.close()           # 파일을 열어 기존의 내용을 지우고 changed에 저장되어 있는 대로 파일을 쓴 후 클로즈.

🖊️3번: 특정 디렉터리부터 그 하위 디렉토리파일을 순차적으로 검색하는 프로그램

  • 기능
    • 자신의 PC에서 특정 파일만을 찾아내고, 그 파일 내의 특정 문장이 포함되어 있는 부분을 찾아, 이를 다른 문구로 수정한 후 저장해야 한다고 생각해 보자.
      이와 비슷한 상황은 실제 업무에서 매우 빈번하게 발생한다.
      파이썬 프로그래머라면 일일이 수작업으로 파일을 찾은 후에 파일을 열어서 수정하고 다시 저장하는 행위를 반복하는 어리석은 짓은 하지 않을 것이다.
  • 코드
# 특정 디렉터리부터 그 하위 디렉토리파일을 순차적으로 검색하는 프로그램

# os모듈 import
import os

# 특정 디렉토리의 하위 디렉토리와 파일들을 모두 검색하는 함수 정의
def search(dirname): 
    flist = os.listdir(dirname) #listdir함수를 사용하여 해당 디렉토리에 있는 파일들의 리스트를 구함
    for f in flist:             # 리스트에서 파일을 꺼내 하나씩 아래를 반복함
        next = os.path.join(dirname, f) # os모듈의 path.join함수를 사용하여 디렉토리를 포함한 전체 경로를 포함한 파일이름을 구함. 
        if os.path.isdir(next):     
            search(next)    # 해당 파일이 디렉토리이면 다시 재귀함수를 호출
        else:
            doFileWork(next)    # 해당 파일이 파일이면 doFileWork함수 실행


# 파일 내용을 바꾸는 함수 doFileWork 정의  
def doFileWork(filename): 
    ext = os.path.splitext(filename)[-1] 
    
    if ext != ".py": 
        return          # 파일 확장자가 .py가 아니면 리턴
    
    if ext == '.py': 
        print(filename)   # 파일 확장자가 .py이면 파일이름 출력후 파일 오픈.
   
    f = open(filename)  
    before = f.read() 
    f.close()                 # 파일을 열어 기존 내용을 before에 저장한 후 보존.
    after = before.replace("ABC", "DEF")  #replace함수를 사용하여 ABC를 DEF로 바꾸어 저장함.
    
    f = open(filename, "w") 
    f.write(after) 
    f.close()     # 파일을 열어 기존 내용을 지우고 수정된 after를 쓴 후 클로즈.

search("d:/")       # D드라이브의 하위 파일들을 검색하도록 실행