常用模块

1. 检索文件夹大小的程序

# 要求执行方式如下
# python3.8 run.py 文件夹

import os
import sys


def get_file_size(files_path, size=0):
    for file in os.listdir(files_path):
        file = os.path.join(files_path, file)
        if not os.path.isfile(file):
            files_path = file
            if len(os.listdir(files_path)) == 0:
                size = 0
            else:
                return get_file_size(files_path, size),

        else:
            size += os.path.getsize(os.path.join(files_path, file))

    return print(size,'个字节')


files_path1 = sys.argv[1]
get_file_size(files_path1)

2. 随机验证码程序

import random


def func():
    addition = ''
    for i in range(6):
        a = chr(random.randint(ord('a'), ord('z')))
        b = chr(random.randint(ord('A'), ord('Z')))
        c = str(random.randint(0, 9))
        res = random.choice([a, b, c])
        addition += res
    return print(addition)


func()

3. 拟下载以及打印进度条

import time


def func(file_load, down_load=0):
    def progress_bar(percent):
        bar = int(percent * 50) * '#'
        print('\r[%-50s] %d%%' % (bar, percent * 100), end='')

    while down_load < file_load:
        percent = down_load / file_load
        down_load += 1024
        time.sleep(0.3)
        if percent > 1:
            percent = 1
        progress_bar(percent)


func(33333)

4. 文件copy脚本

import sys

ori_file = sys.argv[1]
cop_file = sys.argv[2]

with open(f'%s' % ori_file, mode='rb') as f_read, \
        open(f'%s' % cop_file, mode='wb') as f_write:
    for line in f_read:
        f_write.write(line)

    print('复制成功')

5. 把登录与注册的密码都换成密文形式

import hashlib


def register():
    while True:
        username = input('请输入用户名:').strip()
        with open(r'db.txt', mode='r+b') as f1:
            for line in f1:
                line = line.strip().split(':'.encode('utf-8'))
                if username.encode('utf-8') == line[0]:
                    print('用户已存在,请重新输入:')
                    break
            else:
                password1 = input('请输入用密码:').strip()
                password2 = input('请再次输入用密码:').strip()
                if password1 == password2:
                    m1 = hashlib.sha256()
                    m1.update(password1.encode('utf-8'))
                    f1.seek(0, 2)
                    f1.write('\n{}:{}'.format(username, m1.hexdigest()).encode('utf-8'))
                    break
                else:
                    print('两次密码不一致,请重新输入:')

def login():
    while True:
        username = input('请输入账号:').strip()
        password = input('请输入密码:').strip()
        with open(r'db.txt', 'rb') as f2:
            for line in f2:
                line = line.strip().split(':'.encode('utf-8'))
                if username.encode('utf-8') == line[0]:
                    m2 = hashlib.sha256()
                    m2.update(password.encode('utf-8'))
                    if m2.hexdigest().encode('utf-8') == line[1]:
                        print('登录成功')
                        return username
                    else:
                        print('密码输入错误,请重新输入:')
                        break
            else:
                print('账号不存在,请重新输入:')
register()
login()

6. 文件完整性校验(考虑大文件)

import hashlib


def download_file():
    with open(r'download.txt', 'rb') as f1:
        m1 = hashlib.sha256()
        for i in [0, 100, 200]:
            f1.seek(i, 0)
            res1 = f1.read(50)
            m1.update(res1)
        info1 = m1.hexdigest()
        return info1


def upload_file():
    with open(r'upload.txt', 'rb') as f2:
        m2 = hashlib.sha256()
        for j in [0, 100, 200]:
            f2.seek(j, 0)
            res2 = f2.read(50)
            m2.update(res2)
        info2 = m2.hexdigest()
        return info2


if download_file() == upload_file():
    print('文件完整')
else:
    print('文件缺失')

7. 注册功能改用json实现

import json
import hashlib
import os


def password_sha256(password):
    m1 = hashlib.sha256()
    m1.update('天王盖地虎'.encode('utf-8'))
    m1.update(password.encode('utf-8'))
    m1.update('宝塔镇河妖'.encode('utf-8'))
    return m1.hexdigest()


def register():
    while True:
        username = input('请输入用户名:').strip()
        with open(r'bd.json', mode='rt', encoding='utf-8') as f1, \
                open(r'bd_swap.json', mode='wt', encoding='utf-8') as f2:
            json_dic = json.load(f1)
            if username in json_dic:
                print('用户已存在,请重新输入:')
                continue
            else:
                password1 = input('请输入用密码:').strip()
                password2 = input('请再次输入用密码:').strip()
                if password1 == password2:
                    psd = password_sha256(password1)
                    json_dic[username] = {
                        'password': psd,
                        'ID': 'junior'
                    }
                    json.dump(json_dic, f2,indent=1)
                    break
                else:
                    print('两次密码不一致,请重新输入:')
    os.remove(r'bd.json')
    os.rename(r'bd_swap.json', r'bd.json')


def login():
    while True:
        username = input('请输入账号:').strip()
        password = input('请输入密码:').strip()
        with open(r'bd.json', 'rt', encoding='utf-8') as f3:
            user_dic = json.load(f3)
            if username in user_dic:
                if password_sha256(password) == user_dic[username]['password']:
                    print('登录成功')
                    return username
                else:
                    print('密码输入错误,请重新输入:')
                    continue
            else:
                print('账号不存在,请重新输入:')

register()
login()

 

posted @ 2021-01-08 15:21  Avery_W  阅读(74)  评论(0编辑  收藏  举报