首页 > 编程语言 >python常用内置模块(持续更新中)

python常用内置模块(持续更新中)

时间:2023-12-17 20:47:08浏览次数:50  
标签:内置 python time tm 模块 import print path os

random模块相关方法

需要掌握的,未提及的建议自行了解

import random

大于0且小于1之间的小数 (不含1)

random.random()  # 0.38916016381720087

指定区间 指定start到end(不含end)之间的随机小数

random.uniform(0, 10) # 8.080921224222864

指定区间 指定start到end(含end)之间的随机整数

random.randint(1, 20)  #  14

指定区间 指定start到end(不含end)之间的随机整数

random.randrange(1, 20) # 14

指定区间 指定start到end(不含end)之间的随机整数 第三个参数是步长 同python自带的range

random.randrange(1, 20, 5)  # 6

随机取可迭代类型中的一个

nameList = ["小满", "大乔", "王昭君"]
random.choice(nameList)  # 大乔
random.choice(tuple(nameList)) # 王昭君
random.choice("你是年少的欢喜")  # 少

随机取可迭代类型中的多个(返回结果是列表)

nameList = ["小满", "大乔", "王昭君"]
random.sample(nameList, 2)  # ['大乔', '王昭君']
random.sample("你是年少的欢喜", 3)  # ['的', '少', '欢']

另外一种方法

nameList = ["小满", "大乔", "王昭君"]
heroList = random.choices(nameList, k=2)

print(heroList)  # ['大乔', '小满']

洗牌,打乱原列表顺序(无返回值)

nameList = ["小满", "大乔", "王昭君"]
random.shuffle(nameList)

print(nameList)  # ['王昭君', '大乔', '小满']

小练习

随机生成N个验证码

import string
import random


def symbol_code(number, length):
    """
    number: 验证码个数
    length: 验证码长度
    return: 包含全部验证码的列表
    """
    text = string.ascii_letters + string.digits
    symbol_list = []
    for line in range(length):
        symbol = "".join(random.sample(text, number))
        symbol_list.append(symbol)
        
    return symbol_list

OS模块使用方法

需要掌握,未提及的建议自行了解

获取当前脚本绝对路径

import os

file_path = os.path.abspath(__file__)
print(file_path)

获取当前文件的上级目录

import os


base_path = os.path.dirname(os.path.abspath(路径))
print(base_path)

路径拼接

import os


bese_path = "E:\小满"
new_path = os.path.join(bese_path, "document", "img", "三岁啦.jpg")
print(new_path)  
E:\小满\document\img\三岁啦.jpg

判断路径是否纯在

存在返回True 不存在返回False

import os


path = "E:\小满\记录生活\二次元"
exists = os.path.exists(path)

print(exists)
False

创建文件夹(若存在同名文件则报错)

import os

# 创建单个文件夹
os.mkdir("琶洲漫展")
import os


path = "E:\小满\记录生活\二次元"
if not os.path.exists(path):
    # 俺路径规律批量创建文件夹
    os.makedirs(path)

image-20231217155604179

是否为文件

import os


path = "E:\小满\记录生活\二次元\with_friends.jpg"
is_file = os.path.isfile(path)

print(is_file)
True

是否为文件夹

import os


path = "E:\小满\记录生活\二次元"
is_dir = os.path.isdir(path)

print(is_dir)  # True

file_path = os.path.join(path, "with_friends.png") 
is_dir = os.path.isdir(file_path)  # False
print(is_dir)

切割路径

import os


path = "E:\小满\记录生活\二次元\with_friends.jpg"
file_tuple = os.path.split(path)

print(file_tuple)
('E:\\小满\\记录生活\\二次元', 'with_friends.jpg')

获取结尾文件/文件夹名称

import os


path = "E:\小满\记录生活\二次元"
print(os.path.basename(path))  # 二次元

path = "E:\小满\记录生活\二次元\with_friends.jpg"
print(os.path.basename(path))  # with_friends.jpg

删除文件

import os

os.remove("文件路径")

删除单个文件夹(如果文件夹里面有文件存在则报错)

import os

os.rmdir("琶洲漫展")

递归删除多级文件夹(如果文件夹里面有文件存在则报错)

import os

dir_path = "E:\小满\记录生活\二次元\琶洲漫展"

os.removedirs(dir_path)
OSError: [WinError 145] 目录不是空的。: 'E:\\小满\\记录生活\\二次元\\琶洲漫展'

image-20231217163251010

如果文件夹全部为空了,那么才可以递归去删除

import os

dir_path = "E:\小满\记录生活\二次元\琶洲漫展"

os.removedirs(dir_path)  # 成功删除下面的所有文件夹

image-20231217164225743

切换工作路径(相当于shell下cd)

import os

os.chdir(path)

重命名文件或者文件夹

import os

os.rename("旧名字", "新名字")
import os

dir_path = "E:\小满\记录生活\二次元\琶洲漫展"
os.chdir(dir_path)


os.rename("with_friends.jpg", "best_friends.jpg")

查看当前文件夹下的所有文件和文件夹

import os

dir_path = "E:\小满\记录生活\二次元\琶洲漫展"
os.chdir(dir_path)
os.mkdir("待整理")

elements = os.listdir(dir_path)
print(elements)
['best_friends.jpg', '待整理']

获取当前工作路径

import os

dir_path = "E:\小满\记录生活\二次元\琶洲漫展"
os.chdir(dir_path)

print(os.getcwd())
E:\小满\记录生活\二次元\琶洲漫展

运行shell命令

import os

os.system("shell命令")
import os

os.system("pip install -r requirements.txt")

将路径字符串转换为适合当前操作系统的标准化形式

注:window的是\,Linux和Mac平台是/

import os


path = "E:\小满\记录生活\二次元\琶洲漫展"
new_path = os.path.join(path, "待整理/王者荣耀区/被偷拍了.jpg")

print(new_path)  
E:\小满\记录生活\二次元\琶洲漫展\待整理/王者荣耀区/被偷拍了.jpg
rel_path = os.path.normcase(new_path)
print(rel_path)
e:\小满\记录生活\二次元\琶洲漫展\待整理\王者荣耀区\被偷拍了.jpg

json模块

什么是序列化 & 反序列化

内存中的数据类型---->序列化---->特定的格式(json或者pickle格式)
内存中的格式<----反序列化<----特定的格式(json或者pickle格式)

土办法:

{"aaa":111}---->序列化str({"aaa":111})---->'{"aaa":111}'
{"aaa":111}<----反序列化eval('{"aaa":111}')<----'{"aaa":111}'

为何要序列化

序列化得到结果 ===> 特定的格式的内容有两种用途
1. 可以用于存储===>用于存档
2. 传输给其他平台使用===>跨平台数据交互

eg:
	python                     dart
	 列表        特定的格式       数组    

强调:

针对用途1的特定格式:可以是一种专用的格式===> pickle 只有python可以识别
针对用途2的特定格式:应该是一种通用,能够被所有语言识别的格式===>json

dumps方法

数据序列化

import json


data = [1, "2", '小满', True, False]
json_data = json.dumps(data)

print(json_data, type(json_data))
[1, "2", "\u5c0f\u6ee1", true, false] <class 'str'>

啊嘞?这些奇怪的符号是什么鬼!!!

在 Python 的 json 模块中,ensure_ascii 是一个可选参数,用于控制是否将非 ASCII 字符转义为 Unicode 转义序列。

ensure_ascii 设置为 True(默认值)时,json 模块会将所有非 ASCII 字符(例如特殊字符、Unicode 字符)转义为类似 \uXXXX 的 Unicode 转义序列。这样做是为了确保 JSON 字符串中只包含 ASCII 字符,因为在某些情况下,一些系统或应用程序可能只支持 ASCII 字符。

ensure_ascii 设置为 False 时,json 模块会保留非 ASCII 字符,不进行转义。这样可以在 JSON 字符串中包含非 ASCII 字符,以支持更广泛的字符集。

搞定啦!!

import json


data = [1, "2", '小满', True, False]
json_data = json.dumps(data, ensure_ascii=False)  # 这里设置为False就好了

print(json_data)
[1, "2", "小满", true, false]

注意点:

1. 布尔类型会变成小写
2. 单引号会变成双引号

loads方法

反序列化

import json


data = [1, "2", '小满', True, False]
json_data = json.dumps(data, ensure_ascii=False)

ls = json.loads(json_data)
print(ls, type(ls))
[1, '2', '小满', True, False] <class 'list'>

dump方法

序列化到文件

import json


data = [1, "2", '小满', True, False]
with open("data.json", "w", encoding="utf-8") as file:
    # data正常的数据    
    # file文件的句柄
    # ensure_ascii=False 保留非 ASCII 字符,不进行转义
    json.dump(data, file, ensure_ascii=False)

load方法

从文件反序列化

import json

with open("data.json", encoding="utf-8") as file:
    data = json.load(file)

print(data)  # [1, '2', '小满', True, False]

补充:

josn模块使用dump写入文件的时候,基本都是使用w模式,不会使用a模式。

hashlib模块

注:hash算法不算加密算法

md5加密

正常的情况下不可逆

from hashlib import md5


def md5_encryption(text: str):
    md5_obj = md5()  # 创建md5对象
    md5_obj.update(text.encode("utf-8"))  # # 加密数据 update里面必须是一个二进制数据
    return md5_obj.hexdigest()  # # 获取加密后的值,一个32位的字符串


# 调用
if __name__ == "__main__":
    print(md5_encryption("小满"))  # 2cb8e740ec7ba006709eea6adbf8da23

撞库

通俗一点讲,“撞库”就是黑客通过收集互联网上用户的账号和密码信息,生成对应的字典表,再尝试批量登录其他网站。以“撞运气”的形式“试”出可登录的用户名、密码。

尝试解决撞库的方案(加盐)

要在使用 Python 的 MD5 哈希函数时加盐,你可以将盐值与要哈希的数据连接在一起,然后再进行哈希运算。这样可以增加哈希的安全性,使其更难以破解。

import json
import hashlib
import random
import string

def run():
    def hash_with_salt(text, salt):
        md5 = hashlib.md5()
        bytes_text = (text + salt).encode("utf-8") # 加盐
        md5.update(bytes_text)
        return md5.hexdigest()
    
    def get_user_input():
        username = input("输入账号:").strip()
        password = input("输入密码:").strip()
        return username, password
    
    def save(data):
        with open("user_pwd.json", "w", encoding="utf-8") as file:
            json.dump(data, file, ensure_ascii=False)

    # 随机生成4位验证码
    def symbol_code(number=4):
        text = string.ascii_letters + string.digits
        symbol = "".join(random.sample(text, number))
        return symbol
    
    def register():
        username, password = get_user_input()
        symbol = symbol_code()
        symbol_input = input(f"输入您看到的验证码 ->> {symbol} <<- :").strip()
        if symbol_input.casefold() == symbol.casefold():
            print(f"用户[{username}]已成功注册")
            rel_password = hash_with_salt(username, symbol)
            data = {username: {"username": username, "password": rel_password, "salt": symbol}}
            save(data)
        else:
            print("验证码不对")
    
    def login():
        username, password = get_user_input()
        with open("user_pwd.json", encoding="utf-8") as file:
            user_data = json.load(file)
            
        salt = user_data.get(username).get("salt")
        rel_username = user_data.get("username")
        rel_password = user_data.get(username).get("password")
        new_password = hash_with_salt(username, salt)
        
        if new_password == rel_password:
            print(f"用户[{username}]登录成功")
        else:
            print("登录失败")
            
    register()
    login()


if __name__ == "__main__":
    run()
输入账号: 小满
输入密码: 3
输入您看到的验证码 ->> 4osh <<- : 4osh

用户[小满]已成功注册

输入账号: 小满
输入密码: 3

用户[小满]登录成功

本地json文件

{"小满": {"username": "小满", "password": "b338fc469557472904ba8ef75c681d7d", "salt": "4osh"}}

时间模块

time模块

时间戳

从1970年到现在经过的秒数。作用:用于时间间隔的计算。

import time

time.time()
1702811565.8955057

格式化的时间字符串

import time

now = time.strftime("%Y年%m月%d日 %H时%M分%S秒")
print(now)  # 2023年12月17日 19时13分44秒
now = time.strftime("%x %X")
print(now)  # 12/17/23 19:14:04
lctime = time.localtime()
now = time.strftime("%x %X", lctime)
now # 12/17/23 19:14:16

结构化的时间

import time

lctime = time.localtime()  # 本地时区的struct_time
print(lctime) 
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=17, tm_hour=19, tm_min=16, tm_sec=35, tm_wday=6, tm_yday=351, tm_isdst=0)
索引(Index) 属性(Attribute) 值(Values)
0 tm_year(年) 比如2023
1 tm_mon(月) 1 - 12
2 tm_mday(日) 1 - 31
3 tm_hour(时) 0 - 23
4 tm_min(分) 0 - 59
5 tm_sec(秒) 0 - 61
6 tm_wday(weekday) 0 - 6(0表示周日)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为-1
import time

gmtime = time.gmtime()  # UTC时区的struct_time UTC(协调世界时)是一种标准的时间参考,它与时区无关,表示全球统一的时间。
print(gmtime)
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=17, tm_hour=11, tm_min=32, tm_sec=41, tm_wday=6, tm_yday=351, tm_isdst=0)

将格式化的字符串时间按照模板转化成结构化时间

语法:time.strptime(string, format)
string = "2023-12-7 19-42-09"
lctime = time.strptime(string, "%Y-%m-%d %H-%M-%S")

print(lctime)  
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=7, tm_hour=19, tm_min=42, tm_sec=9, tm_wday=3, tm_yday=341, tm_isdst=-1)

转换规律

字符串时间	---->	struct_time    ---->    时间戳
string = "2023-12-7 19-42-09"
lctime = time.strptime(string, "%Y-%m-%d %H-%M-%S")

t = time.mktime(lctime)
print(t)  # 1701949329.0
时间戳    ---->    struct_time    ---->    字符串时间
lctime = time.localtime(t)
now = time.strftime("%x %X", lctime)

print(now)  # 12/17/23 19:50:50

奇怪的知识增加了

time.asctime() 同 time.ctime()
t1 = time.asctime()  # Sun Dec 17 19:51:21 2023
t2 = time.ctime()  # Sun Dec 17 19:51:21 2023

image-20231217195832050

注:图片来源于知乎 友情链接

datetime模块

import time
import datetime

print(datetime.datetime.now())
2023-12-17 20:03:24.682513
print(datetime.datetime.utcnow())
2023-12-17 12:02:19.587722
t = time.time()
print(datetime.datetime.fromtimestamp(t))
2023-12-17 20:03:26.793521
now = datetime.datetime.now()
print(now)
2023-12-17 20:04:57.955645
print(now + datetime.timedelta(3))    # 当前时间+3天  
2023-12-20 20:04:57.955645
print(now + datetime.timedelta(-3))   # 当前时间-3天 
2023-12-14 20:04:57.955645
print(now + datetime.timedelta(days=-3))  # 当前时间-3天  
2023-12-14 20:04:57.955645
print(now + datetime.timedelta(minutes=30))  # 当前时间+30分钟
2023-12-17 20:34:57.955645
print(now + datetime.timedelta(hours=2))  # 当前时间+2小时
2023-12-17 22:04:57.955645

待更新

标签:内置,python,time,tm,模块,import,print,path,os
From: https://www.cnblogs.com/ccsvip/p/17909729.html

相关文章

  • Python模块与包
    【一】模块的介绍【1】什么是模块在Python中,一个py文件就是一个模块,文件名为xxx.py模块名则是xxx,导入模块可以引用模块中已经写好的功能。如果把开发程序比喻成制造一台电脑编写模块就像是在制造电脑的零部件准备好零部件后,剩下的工作就是按照逻辑把它们组装到一起。将......
  • Python迭代器和生成器
    【一】迭代器介绍迭代器即用来迭代取值的工具,而迭代是重复反馈过程的活动其目的通常是为了逼近所需的目标或结果,每一次对过程的重复称为一次“迭代”而每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代whileTrue:msg=input(">>:").strip()......
  • python 浮点数 round 舍一法 向零取整 df 数组 Series 三种数据类型实现
    介绍:python的round函数,默认进行四舍五入,我需要将3.45保留一位小数,3.4 一、一般格式使用Python的内置函数 math.floor() 来向下取整到指定的小数位数。例如,如果你想保留小数点后一位并向下取整,可以这样做:importmathnum=3.45rounded_num=math.floor(num*10)/......
  • Python算法——二叉树遍历
    Python中的二叉树遍历算法详解二叉树是一种常见的树状数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。遍历二叉树是访问树的所有节点并按照特定顺序输出它们的过程。在本文中,我们将讨论二叉树的三种主要遍历算法:前序遍历、中序遍历和后序遍历,并提供相应的Python代码......
  • 【python常用模块之time时间模块】---时间模块(time/datetime)
    title:【python常用模块之time时间模块】---时间模块(time/datetime)date:2023-12-1716:54:06updated:2023-12-1717:00:00description:【python常用模块之time时间模块】---时间模块(time/datetime)cover:https://home.cnblogs.com/u/dream-ze/【一】时间模......
  • 【python入门之OS模块介绍】---OS模块介绍
    title:【python入门之OS模块介绍】---OS模块介绍date:2023-12-1615:54:06updated:2023-12-1616:20:00description:【python入门之OS模块介绍】---OS模块介绍cover:https://home.cnblogs.com/u/dream-ze/【一】OS模块的介绍os模块是Python编程语言中......
  • python之tkinter的鼠标样式
    tkinter的Label、Button、Enter等等cursor都可以使用表中特性改变鼠标样式。取值样式备注arrow based_arrow_down based_arrow_up boat bogosity bottom_left_corner bottom_right_corner bottom_side bottom_tee box_spiral center_ptr circle clock coffee_mug cro......
  • 【python扩展之软件开发目录规范】---软件开发目录规范
    title:【python扩展之软件开发目录规范】---软件开发目录规范date:2023-12-1618:54:06updated:2023-12-1619:20:00description:【python扩展之软件开发目录规范】---软件开发目录规范cover: https://blog.csdn.net/DiligentGG/article/details/125784751......
  • hashlib+time模块
    hashlib模块【一】什么是摘要算法Python的hashlib提供了常见的摘要算法如MD5SHA1等等。摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。摘要算法就是通过摘要函数f()对任意长度的数据data计算出......
  • 深度解析Python上下文管理器:优雅资源管理与异常处理
    Python是一种功能强大且灵活的编程语言,它提供了许多高级工具和特性来简化开发过程。其中之一就是上下文管理器,它允许开发者更优雅地处理资源管理和异常处理。本文将深入探讨Python中上下文管理器的工作原理、使用方法以及实际应用。1. 什么是上下文管理器?上下文管理器是一种Python......