1. 生成N位数字随机验证码
import random
import string
def num_code(length=6):
"""
生成长度为length的数字随机验证码
:param length: 验证码长度
:return: 验证码
"""
return ''.join(random.choice(string.digits) for i in range(0, length))
if __name__ == '__main__':
print(num_code(6))
2.生成唯一token
import uuid
import hashlib
def only_token():
"""
使用md5加密uuid生成唯一的32位token
:return: 加密后的字符串
"""
md5 = hashlib.md5() # 使用MD5加密模式
md5.update(str(uuid.uuid1()).encode('utf-8'))
return md5.hexdigest()
if __name__ == '__main__':
print(only_token())
print(only_token())
3. 删除指定格式的文件
import os
import re
def remove_specified_format_file(file_dir, format_name):
"""
删除指定格式的文件
:param file_dir: 文件根目录
:param format_name: 格式
:return:
"""
for root, dirs, files in os.walk(file_dir):
# print(root) #当前目录路径
# print(dirs) #当前路径下所有子目录
# print(files) #当前路径下所有非目录子文件
for file in files:
if re.match(format_name, file):
print(os.path.join(root, file))
os.remove(os.path.join(root, file))
4.进度条
from tqdm import tqdm
text = ""
with tqdm(total=100, desc='Example', leave=True, ncols=100, unit='B', unit_scale=True) as pbar:
if text == "":
pbar.update(2)
text = "1"
if text == "1":
pbar.update(50)
text = "2"
5.python实现字符串转字典
import ast
import json
target_str = '{"h": 1, "e": 2, "l": 3, "l": 4, "o": 5}'
target_str2 = "{'h': 1, 'e': 2, 'l': 3, 'l': 4, 'o': 5}"
# 方式1:使用json,缺点,字符串中不能出现单引号
# 由于 json 语法规定 数组或对象之中的字符串必须使用双引号,不能使用单引号
# 官网https://www.json.org/json-en.html上有一段描述是
# A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes
print(json.loads(target_str))
# print(json.loads(target_str2)) # 使用json转这个字符串会报错 Expecting property name enclosed in double quotes
# 方式2:使用eval函数,缺点,不安全
print(eval(target_str))
print(eval(target_str2))
# print(eval("__import__('os').system('dir')")) # 会列出当前的目录文件,如果字符串是一些删除命令,则可以把整个目录清空!
# 方式3,使用ast.literal_eval,没有json与eval的缺点,推荐使用这个
print(ast.literal_eval(target_str))
print(ast.literal_eval(target_str2))
6.python控制台输出带颜色的文字方法
"""
格式: 设置颜色开始 :\033[显示方式;前景色;背景色m
说明:
前景色 背景色 颜色
---------------------------------------
30 40 黑色
31 41 红色
32 42 绿色
33 43 黃色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
显示方式 意义
-------------------------
0 终端默认设置
1 高亮显示
4 使用下划线
5 闪烁
7 反白显示
8 不可见
例子:
\033[1;31;40m <!--1-高亮显示 31-前景色红色 40-背景色黑色-->
\033[0m <!--采用终端默认设置,即取消颜色设置-->
"""
print('紫红字体 \033[1;35m hello world \033[0m!')
print('褐色背景绿色字体 \033[1;32;43m hello world \033[0m!')
print('\033[1;33;44mhello world\033[0m')
7.有序字典
import collections
d1 = collections.OrderedDict() # 创建一个有序字典
d1['a'] = 'A'
d1['c'] = 'C'
d1['b'] = 'B'
d1['d'] = 'D'
for k, v in d1.items():
print(k, v)
8.根据年月获取当月天数
def get_month_days(year, month):
"""
根据年份,月份信息显示此月份天数
:param year: 年份:
:param month: 月份(1~12):
:return: 当月天数
"""
if month > 12 or month <= 0:
return -1
if month == 2:
return 29 if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 else 28
if month in (4, 6, 9, 11):
return 30
else:
return 31
if __name__ == '__main__':
a = '2020-04'.split('-')
year = int(a[0])
month = int(a[1])
print(get_month_days(year, month))
9. 获取当前时间月份的首日与最后一天
import calendar
def get_month_start_and_end(date=datetime.datetime.now()):
"""
获取当前时间的月份首日与最后一天
:param date:
:return: (首日,最后一天)
"""
year, month = str(date).split('-')[0], str(date).split('-')[1]
end = calendar.monthrange(int(year), int(month))[1]
return f'{year}-{month}-01', f'{year}-{month}-{end}'
10.把时间字符串转换成刚刚、1天前、3个月前、1年前
import datetime
import time
def date_interval(date_str):
"""
获取时间间隔
1分钟前,2分钟前,10分钟前,1小时前,2小时前,1天前,2天前,3天前,1个月前,3个月前,1年前,3年前
:param date_str: 时间字符串
:return: 字符串
"""
date_str = time.strptime(date_str, '%Y-%m-%d %H:%M:%S')
# 将时间元组转换为时间戳
t = time.mktime(date_str)
# 当前时间
seconds = time.time() - t
years = int(seconds // (60 * 60 * 24 * 365))
if years:
return '{}年前'.format(years)
months = int(seconds // (60 * 60 * 24 * 30))
if months:
return '{}月前'.format(months)
days = int(seconds // (60 * 60 * 24))
if days:
return '{}天前'.format(days)
hours = int(seconds // (60 * 60))
if hours:
return '{}小时前'.format(hours)
minutes = int(seconds // (60))
if minutes:
return '{}分钟前'.format(minutes)
return '刚刚'
if __name__ == '__main__':
date1 = '2019-07-10 15:27:51'
date2 = '2021-07-10 15:27:51'
date3 = '2021-08-10 15:27:51'
date4 = '2021-08-12 11:01:51'
date5 = datetime.datetime.now() + datetime.timedelta(seconds=-3)
date5 = date5.strftime('%Y-%m-%d %H:%M:%S')
print(date_interval(date1))
print(date_interval(date2))
print(date_interval(date3))
print(date_interval(date4))
print(date_interval(date5))
11.获取电脑磁盘、CPU、内存使用情况
import psutil
# pip install psutil
# 获取本机磁盘使用率和剩余空间G信息
def get_disk_info():
# 循环磁盘分区
content = ""
for disk in psutil.disk_partitions():
# 读写方式 光盘 or 有效磁盘类型
if 'cdrom' in disk.opts or disk.fstype == '':
continue
disk_name_arr = disk.device.split(':')
disk_name = disk_name_arr[0]
disk_info = psutil.disk_usage(disk.device)
# 磁盘剩余空间,单位G
free_disk_size = disk_info.free // 1024 // 1024 // 1024
# 当前磁盘使用率和剩余空间G信息
info = "{}盘使用率:{}%%, 剩余空间:{}G ".format(disk_name, str(disk_info.percent), free_disk_size)
# 拼接多个磁盘的信息
print(info, end="\n")
# cpu信息
def get_cpu_info():
cpu_percent = psutil.cpu_percent(interval=1)
cpu_info = "CPU使用率:%i%%" % cpu_percent
print(cpu_info)
# 内存信息
def get_memory_info():
virtual_memory = psutil.virtual_memory()
used_memory = virtual_memory.used / 1024 / 1024 / 1024
free_memory = virtual_memory.free / 1024 / 1024 / 1024
memory_percent = virtual_memory.percent
memory_info = "内存使用:%0.2fG,使用率%0.1f%%,剩余内存:%0.2fG" % (used_memory, memory_percent, free_memory)
print(memory_info)
if __name__ == '__main__':
get_disk_info()
get_cpu_info()
get_memory_info()
12.列表相同元素分类、分组
import itertools
data = [1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 1, 'a', 'a']
a =[list(group) for key, group in itertools.groupby(data)]
print(a)
13.docker占用硬盘太多
docker system prune -a
评论区