1.常用内置模块之collections模块
1.具名元组:namedtuole:可以使用第一个元素的名字来修饰元组
from collections import namedtuple
point = namedtuple('位置坐标', ['x', 'y'])
p1 = point(4, 6)
print(p1)
print(p1.x)
print(p1.y)
card = namedtuple('组合', ['num', 'color'])
c1 = card('J', '黑桃')
c2 = card('k', '红桃')
print(c1.num, c1.color)
2.队列
队列与堆栈
队列:先进先出
堆栈:先进后出
队列和堆栈都是一边只能进一边只能出
3.deque模块:我们在对元祖首位的文件增删时之前的方法较为麻烦,可以调用deque实现首尾高效增删(适用于队列和栈)
from collections import deque
q = deque(['jason', 'jerry', 'kitty'])
q.append('janny')
q.appendleft('max')
print(q)
q.pop()
q.popleft()
print(q)
4.queue遵循先进先出原则,先进入的先删除。put()是增加,get()是删除
from multiprocessing import Queue
q = Queue(4)
q.put(11)
q.put(22)
q.put(33)
q.put(44)
q.put(55)
print(q.get())
from multiprocessing import Queue
q = Queue(4)
q.put(11)
q.put(22)
q.put(33)
q.put(44)
q.get()
q.put(55)
print(q.get())
5.OrderDict:使用是dict是无序的,我们想要使dict变得有顺序可以使用OrderDict,添加顺序越前顺序就越靠前
from collections import OrderedDict
od = OrderedDict()
od['name'] = 'max'
od['hobby'] = 'soccer'
od['base'] = 'Shanghai'
print(od)
6.Counter:Counter是用来跟踪值出现的次数,以字典键值对的形式存储
from collections import Counter
c = Counter('jkadfyhjksdbvsfdfs')
print(c)
2.常用内置模块之时间模块-import time
1.时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,我们运行“type(time.time())”,返回的是float类型
import time
print(time.time())
start_time = time.time()
print('看看这个程序执行需要多久')
time.sleep(3)
end_time = time.time()
print('执行时间', end_time - start_time)
import time
print(type(time.time()))
2.结构化时间:主要是给计算机看的,其中tm_wday是星期(从0开始计),0代表星期一,6代表星期天。tm_yday代表一年当中的第几天
print(time.localtime())
3.格式化时间:主要是给人看的,类似以格式化输出,连接符可以自定义
import time
print(time.strftime('%Y-%m-%d'))
print(time.strftime('%Y/%m/%d'))
print(time.strftime('%Y/%m/%m %H:%M:%S'))
print(time.strftime('%Y/%m/%d %X'))
print(time.strftime('%Y-%m'))
索引(Index) |
属性(Attribute) |
值(Values) |
0 |
tm_year(年) |
比如2011 |
1 |
tm_mon(月) |
1 - 12 |
2 |
tm_mday(日) |
1 - 31 |
3 |
tm_hour(时) |
0 - 23 |
4 |
tm_min(分) |
0 - 59 |
5 |
tm_sec(秒) |
0 - 60 |
6 |
tm_wday(weekday) |
0 - 6(0表示周一) |
7 |
tm_yday(一年中的第几天) |
1 - 366 |
8 |
tm_isdst(是否是夏令时) |
默认为0 |
3.常用内置模块之时间模块-import datatime
1.datetime和date的区别在于datetime.now()和datetime.today()都会精确到秒。而date只会精确到日
import datetime
datetime.now():获取当前datetime
print(datetime.datetime.now())
print(datetime.datetime.today())
print(datetime.date.today())
2.date.utcnow():获取获取当前格林威治时间
from datetime import datetime
print(datetime.utcnow())
3.datetime(五个参数):获取指定时间
from datetime import datetime
c = datetime(2019, 6, 15, 20, 58)
print(c)
4.将字符串转换成标准格式时间:
from datetime import datetime
d = datetime.strptime('2017/9/30','%Y/%m/%d')
print(d)
e = datetime.strptime('2019/5/1', '%Y/%m/%d')
print(e)
f = datetime.strptime('2017年9月30日星期六', '%Y年%m月%d日星期六')
print(f)
5.计划指定时间任务
import datetime
ctime = datetime.date.today()
print(ctime)
del_time = datetime.timedelta(days=3)
print(ctime + del_time)
import datetime
ctime = datetime.datetime.today()
print(ctime)
del_time = datetime.timedelta(minutes=3)
print(ctime + del_time)
4.常用内置模块之随机数模块
1.产生0-1随机的小数
import random
print(random.random())
2.随机产生整数(首尾都包含)(摇骰子)
print(random.randint(1,6))
3.随机产生一个小数(包含首尾)
import random
print(random.uniform(1,10))
4.随机产生范围中一个数,间隔(步长)为2
print(random.randrange(1,20,2))
5.随机抽取列表当中一个元素,几率相等
print(random.choice(['一等奖', '二等奖', '三等奖', '谢谢惠顾']))
print(random.choices(['一等奖', '二等奖', '三等奖', '谢谢惠顾']))
"""
choices会保留数据类型,choice不会
"""
6.choice.sample:
用法一:随机抽取列表当中几个数据值,可以指定数量
print(random.sample(['jason', 'jerry','tony', 'max'], 2))
用法二:sample第一个参数可以传多个类型,string.ascii_uppercase是字符串的大写字母,string.digits是字符串的数字,string.ascii_lowercase是字符串的小写字母,第二个参数是每个字符串有几位组成:
import random
import string
str_list = ["".join(random.sample(string.ascii_uppercase + string.digits + string.ascii_lowercase, 5)) for i in range(5)]
print(str_list)
7.打乱列表当中数据值的顺序:random.shuffle()(洗牌)
l1 = [1,2,3,4,5,6,7,8,9,10,'J','Q','K']
random.shuffle(l1)
print(l1)
8.产生随机验证码,每一位都可以是大小写、字母
def get_code(n):
code = ''
for i in range(n):
random_upper = chr(random.randint(65, 90))
randon_lower = chr(random.randint(97,112))
randon_int = str(random.randint(0,9))
temp = random.choice([random_upper, randon_lower,randon_int])
code += temp
return code
res = get_code(4)
print(res)
4.OS模块
os模块主要与代码运行所在的操作系统打交道
引入模块:import os
1.创建目录(文件夹):在执行文件所在的路径下创建目录,可以创建单级目录
1.1:os.mkdir()
os.mkdir(r'd1')
os,mkdir(r'd2\d222\d22'') # mkdir创建多级目录会报错
1.2:os.makedirs()
os.makedirs(r'aa')
os.makedirs(r'aaa\bbb\ccc')
2.删除目录
2.1:os.rmdir
os.rmdir(r'a')
os.rmdir(r'aaa\bbb\ccc')
os.removedirs(r'd1')
os.removedirs(r'aaa\bbb\ccc')
os.removedirs(r'aaa\bbb\ccc')
3.列举指定路径下的内容名称:os.listdir() (只能写绝对路径)
print(os.listdir(r'D:\上海python金牌班\20201020 day20-os模块、sys模块、json模块'))
4.删除/重命名文件(文件和目录要区分清楚)
重命名:
os.rename(r'命名前.txt', r'命名后.txt')
os.remove(r'D:\上海python金牌班\20201020 day20-os模块、sys模块、json模块\命名后.txt')
5.获取当前工作目录(文件夹目录不是文件目录)
print(os.getcwd())
6.动态获取项目根路径(非常重要)
6.1获取文件路径:
print(os.path.abspath(__file__))
6.2获取目录路径
print(os.path.dirname(__file__))
7.判断路径是否存在:文件、目录都可以判断
print(os.path.exists(r'01 os模块.py'))
print(os.path.exists(r'D:\上海python金牌班\20201020 day20-os模块、sys模块、json模块'))
print(os.path.exists(r'D:\上海python金牌班'))
8.判断路径是否文件:可以写绝对路径或相对路径
print(os.path.isfile(r'01 os模块.py'))
print(os.path.isfile(r'D:\上海python金牌班\20201020 day20-os模块、sys模块、json模块\01 os模块.py'))
9.路径拼接(非常重要):不同操作系统的路径分隔符不一样,按照以下方式可以兼容不同系统
s1 = r'01 os模块.py'
s2 = r'D:\上海python金牌班\20201020 day20-os模块、sys模块、json模块\aaa'
print(os.path.join(s1, s2))
10.获取文件大小(字节)
print(os.path.getsize(r'01 os模块.py'))
print(os.path.getsize(r'a.txt'))
"""
a.txt中字符:qqq哈哈哈;1个汉字占3个字节,1个字母占1个字节
"""
5.sys模块
引入模块: import sys
sys.path:系统环境变量,里面第一个路径一般是执行文件的路径
1.获取python解释器最大递归深度
print(sys.getrecursionlimit())
2.修改解释器最大递归深度,运行会返回None代表已修改
print(sys.setrecursionlimit(2000))
3.获取解释器版本
print(sys.version)
4.获取平台信息
print(sys.platform)
5.sys,argv:打印返回的是一个列表
print(sys.argv)
列表当中的元素是当前执行文件的路径,该列表可以在cmd窗口中添加元素,并且在pycharm中执行代码校验信息并且执行相应功能。在cmd窗口添加元素格式为:python 文件绝对路径 元素1 元素2,元素1和元素2是需要校验的信息
import sys
res = sys.argv
if len(res) != 3:
print('缺少执行命令需要的用户名或密码')
else:
username = res[1]
userpwd = res[2]
if username == 'max' and userpwd == '123':
print(f'{max}先生您好,程序执行正常')
else:
print('用户名或密码错误')
6.json模块
1.json模块也称为序列化模块,序列化可以打破语言限制实现不同编程语言之间数据交互。python数据类型和JS中的自定义对象表现形式相同,但它们属于不同的语言,需要一个媒介来互相转换。将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化,相反的过程叫做反序列化
2.json格式数据的作用:实现不同语言的数据交互
3.json数据类型格式:字符串并且都是双引号
4.json相关操作
针对数据
json.dumps()
json.loads()
针对文件
json.dump()
json.load()
5.如何把字典转成json格式(str)然后再转回字典(dict)
import json
user_dict = {'user_name': 'max', 'user_age': 25, 'user_gender':'male'}
with open(r'b.txt', 'w', encoding='utf8') as f1:
json_w_str = json.dumps(user_dict)
f1.write(json_w_str)
with open(r'b.txt', 'r', encoding='utf8') as f2:
json_r_str = f2.read()
json_str = json.loads(json_r_str)
print(json_str, type(json_str))
"""
当json模块结合文件一起用时,可以将"序列化"、"写入"结合成一行代码:
json.dump(iser_dict. f1)
也可以将"反序列化"、"读"结合携程一行代码:
json.load(f2)
with open(r'b.txt', 'w', encoding='utf8') as f1:
json.dump(user_dict, f1)
with open(r'b.txt', 'r', encoding='utf8') as f2:
res = json.load(f2)
print(res)
"""
7.json实战
import os
import json
while True:
print("""
1.注册
2.登陆
""")
choice = input('请输入您的任务编号>>>:').strip()
if choice == '1':
base_order = os.path.dirname(__file__)
ds_dir = os.path.join(base_order, 'db')
if not os.path.exists(ds_dir):
os.mkdir(ds_dir)
user_name = input('请输入您的用户名>>>:').strip()
judge_name = f'{user_name}.json'
if judge_name in os.listdir(ds_dir):
print('您的信息已注册')
else:
user_pwd = input('请输入您的密码>>>:').strip()
user_dict = {
'username':user_name,
'userpwd':user_pwd
}
user_file_path = os.path.join(ds_dir, f'{user_name}.json')
with open (user_file_path, 'w', encoding='utf8') as f1:
json.dump(user_dict, f1)
print(f'用户{user_name}注册成功')
elif choice == '2':
load_name = input('请输入您的用户名>>>:').strip()
base_order = os.path.dirname(__file__)
ds_dir = os.path.join(base_order, 'db')
load_user_path = os.path.join(ds_dir, f'{load_name}.json')
if not os.path.isfile(load_user_path):
print('该用户未注册')
else:
load_pwd = input('请输入您的密码>>>:').strip()
with open(load_user_path, 'r', encoding='utf8') as f2:
real_dict = json.load(f2)
if load_name == real_dict.get('username') and load_pwd == real_dict.get('userpwd'):
print('登陆成功')
else:
print('密码错误')
8.作业
"""
1.编程小练习
有一个目录文件下面有一堆文本文件
eg:
db目录
J老师视频合集
R老师视频合集
C老师视频合集
B老师视频合集
文件内容自定义即可 要求循环打印出db目录下所有的文件名称让用户选择
用户选择哪个文件就自动打开该文件并展示内容
涉及到文件路径全部使用代码自动生成 不准直接拷贝当前计算机固定路径
"""
import os
while True:
file_dir = os.path.dirname(__file__)
data_dir = os.path.join(file_dir, 'data')
file_list = os.listdir(data_dir)
for i, j in enumerate(file_list,start=1):
print(f'{i} {j}')
choice = input('请输入帮您想观看的内容编号>>>:').strip()
if not choice.isdigit():
print('编号必须是纯数字')
continue
choice = int(choice)
if not choice in range(1, len(file_list) + 1):
print('没有这个内容')
continue
target_dir = os.path.join(data_dir, file_list[choice - 1])
with open(target_dir, 'r', encoding='utf8') as f1:
res = f1.read()
print(res)
"""
2.编写一个统计指定文件类型的脚本工具
输入指定类型的文件后缀
eg:.txt
并给出一个具体路径 之后统计该类型文件在该文件下的个数
ps:简单实现即可 无需优化
"""
import os
base_dir = os.path.dirname(__file__)
file_list = os.listdir(base_dir)
target_file = input('请输入您想要统计的文件后缀>>>:').strip()
count = 0
for i in file_list:
if i.endswith(target_file):
count += 1
print(count)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律