juuuding

Chapter 03 기초 프로그램 만들기 #4, 5, 6 본문

Python/파이썬과 40개의 작품들

Chapter 03 기초 프로그램 만들기 #4, 5, 6

jiuuu 2023. 1. 21. 04:54

 #4 QR코드 생성기

 

1. 라이브러리 설치

 -qrcode 라이브러리 설치

pip install qrcode

 

2. QR코드 생성 코드

import qrcode

qr_data= 'www.naver.com'

# qrcode.make으로 이미지 만들기
qr_img= qrcode.make(qr_data)

# save_path 변수에 저장될 경로 바인딩
save_path='4. QR code\\' + qr_data + '.png'

# 이미지 저장
qr_img.save(save_path)

 

3. 여러 개의 QR코드 한 번에 생성하는 코드

 (1) .txt 파일 읽고 한 줄씩 표시하는 코드

import qrcode

file_path=r'4. QR code\qrcode.txt'

# readlines()로 파일 읽고 줄 별로 리스트 값의 형태로 내어줌
with open(file_path, 'rt', encoding='UTF8') as f:
    read_lines=f.readlines()

#line.strip()은 줄 마지막에 줄바꿈 문자 삭제
    for line in read_lines:
        line=line.strip()
        print(line)

 

 (2) 읽어온 주소로 qr 코드 생성

import qrcode

file_path=r'4. QR code\qrcode.txt'
with open(file_path, 'rt', encoding='UTF8') as f:
    read_lines=f.readlines()

    for line in read_lines:
        line=line.strip()
        print(line)

        qr_data = line
        qr_img = qrcode.make(qr_data)

        save_path= '4. QR code\\'+qr_data+'.png'
        qr_img.save(save_path)

 

+ 실행 하였을 때 "No module named image"라는 오류가 떴다.

pip install pillow

위의 문장을 터미널에 입력하여  PIL (Python Image Library and Imaging package) 설치하면서 문제 해결.

 

 

 #5 컴퓨터의 정보 확인

 

1. 라이브러리 설치

 -psutil : 컴퓨터 정보 확인할 때 사용하는 라이브러리

pip install psutil

 

2. 컴퓨터 정보 확인 

import psutil

#cpu 속도
cpu=psutil.cpu_freq()
print(cpu)

#cpu 물리코어 수
cpu_core=psutil.cpu_count(logical=False)
print(cpu_core)

#메모리 정보
memory = psutil.virtual_memory()
print(memory)

#디스크 정보
disk=psutil.disk_partitions()
print(disk)

#네트워크 통해 보내고 받은 데이터량
net=psutil.net_io_counters()
print(net)

 

3. 필요한 정보만 출력하기

import psutil

#cpu 속도
cpu=psutil.cpu_freq()
cpu_current_ghz = round(cpu.current/1000,2)
print(f"cpu 속도: {cpu_current_ghz}GHz")

#cpu 물리코어 수
cpu_core=psutil.cpu_count(logical=False)
print(f"코어: {cpu_core}개")

#메모리 정보
memory = psutil.virtual_memory()
memory_total=round(memory.total/1024**3)
print(f"메모리: {memory_total}GB")

#디스크 정보
disk=psutil.disk_partitions()
for p in disk:
    print(p.mountpoint,p.fstype,end=' ')
    du = psutil.disk_usage(p.mountpoint)
    disk_total = round(du.total/1024**3)
    print(f"디스크 크기: {disk_total}GB")

#네트워크 통해 보내고 받은 누적 데이터량
net=psutil.net_io_counters()
sent= round(net.bytes_sent/1024**2,1)
recv= round(net.bytes_recv/1024**2,1)
print(f'보내기: {sent}MB, 받기: {recv}MB')

 

4. 1초당 반복해서 정보 출력

import psutil

curr_sent=0
curr_recv=0

prev_sent=0
prev_recv=0

while True:
    #cpu 사용량 1초 동안의 평균값 구하기, interval 값으로 시간 조절 가능능
    cpu_p= psutil.cpu_percent(interval=1)
    print(f'CPU 사용량: {cpu_p}%')

    memory = psutil.virtual_memory()
    memory_avail = round(memory.available/1024**3,1)
    print(f'사용 가능한 메모리:{memory_avail}GB')

    net=psutil.net_io_counters()
    curr_sent=net.bytes_sent/1024**2
    curr_recv=net.bytes_recv/1024**2

    sent=round(curr_sent-prev_sent,1)
    recv=round(curr_recv-prev_recv,1)

    print(f'보내기: {sent}MB 받기:{recv}MB')

    prev_sent=curr_sent
    prev_recv=curr_recv

 

 

 #6 압축파일 암호 푸는 프로그램

 

1. 압축 푸는 코드 만들고 실행

import itertools

passwd_string = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

#1~3까지 반복
for len in range(1,4):
    #passwd_string 문자열을 repeat=길이로 정렬하여 반환
    to_attempt=itertools.product(passwd_string,repeat=len)
    #반환된 문자의 수만큼 반복
    for attempt in to_attempt:
        #반환된 값을 문자열로 반환. ''.join(리스트)는 리스트의 값을 문자열로 반환
        passwd=''.join(attempt)
        print(passwd)

 - 1자리부터 3자리까지 숫자, 영문 소문자, 영문 대문자의 값이 순서대로 출력된다. 자리수가 늘어나면 경우의 수가 많아짐으로 시간이 오래 소요된다.

 

 

2. 비밀번호를 찾으면 프로그램 종료

import itertools
import zipfile

def un_zip(passwd_string, min_len, max_len,zFile):
    for len in range(min_len, max_len+1):
    	#passwd_string 문자열을 repeat=길이로 정렬하여 반환
        to_attempt = itertools.product(passwd_string, repeat = len)
        #반환된 문자의 수만큼 반복
        for attempt in to_attempt:
        #반환된 값을 문자열로 반환. ''.join(리스트)는 리스트의 값을 문자열로 반환
            passwd = ''.join(attempt)
            print(passwd)
            try:
                zFile.extractall(pwd=passwd.encode())
                print(f"비밀번호는 {passwd} 입니다.")
                return 1
            except:
                pass


passwd_string = "0123456789"

zFile=zipfile.ZipFile(r'6. Zipfile decoding\code1234.zip')

min_len =1
max_len =5

unzip_result = un_zip(passwd_string, min_len, max_len, zFile)

if unzip_result ==1:
    print("암호 찾기에 성공하였습니다.")
else:
    print("암호 찾기에 실패하였습니다.")